[Opal-commits] opal/samples/simple_objects main.cpp,1.27,1.28
Status: Inactive
Brought to you by:
tylerstreeter
|
From: tylerstreeter <tyl...@us...> - 2005-03-30 23:27:05
|
Update of /cvsroot/opal/opal/samples/simple_objects In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4745/samples/simple_objects Modified Files: main.cpp Log Message: implemented InclineSensor; added code for Ogre sample apps Index: main.cpp =================================================================== RCS file: /cvsroot/opal/opal/samples/simple_objects/main.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** main.cpp 28 Mar 2005 22:33:06 -0000 1.27 --- main.cpp 30 Mar 2005 23:26:21 -0000 1.28 *************** *** 26,31 **** float gCameraZoom; float gCameraYPos; ! int gOldMousePos[2]; bool gMouseButtonsPressed[2]; opal::Simulator* gSimulator=NULL; std::vector<Base3DObject*> gObjects; --- 26,34 ---- float gCameraZoom; float gCameraYPos; ! int gMousePosScreen[2]; ! //float gMousePosWorld[2]; bool gMouseButtonsPressed[2]; + const float gRotateSpeed = 3; + const float gZoomSpeed = 3; opal::Simulator* gSimulator=NULL; std::vector<Base3DObject*> gObjects; *************** *** 65,68 **** --- 68,81 ---- void setupVisualShapes(opal::Solid* s); void makeRagdoll(); + opal::Point3r getGlobalMousePos(); + void drawPickingSpring(); + + // Picking stuff. + opal::RaycastSensor* gRaySensor = NULL; + opal::SpringMotor* gPickingSpring = NULL; + GLUquadricObj* gQuadric = NULL; + + opal::Solid* gSensorSolid = NULL; + opal::InclineSensor* gSensor = NULL; int main(int argc, char **argv) *************** *** 93,96 **** --- 106,135 ---- gGround->addShape(planeData); + // Create the objects used for picking. + gPickingSpring = gSimulator->createSpringMotor(); + gPickingSpring->setEnabled(false); + //opal::SpringMotorData motorData; + //gPickingSpring->init(motorData); + gRaySensor = gSimulator->createRaycastSensor(); + opal::RaycastSensorData rayData; + gRaySensor->init(rayData); + gQuadric = gluNewQuadric(); + + // testing... + gSensorSolid = gSimulator->createSolid(); + opal::Matrix44r t; + t.translate(0, 5, 0); + gSensorSolid->setTransform(t); + opal::BoxShapeData boxData; + gSensorSolid->addShape(boxData); + BoxObject* newBox = new BoxObject(gSimulator, gSensorSolid, + boxData.dimensions, boxData.offset); + gObjects.push_back(newBox); + gSensor = gSimulator->createInclineSensor(); + opal::InclineSensorData sensorData; + sensorData.solid = gSensorSolid; + sensorData.axis.set(1, 0, 0); + gSensor->init(sensorData); + std::cout << "==============================================" << std::endl; std::cout << " OPAL Objects Test" << std::endl; *************** *** 121,124 **** --- 160,164 ---- gSimulator->destroy(); + gluDeleteQuadric(gQuadric); return 0; *************** *** 236,241 **** gWindowHeight = INITIAL_WINDOW_HEIGHT; gAspectRatio = (float)gWindowWidth/(float)gWindowHeight; ! gOldMousePos[0] = 0; ! gOldMousePos[1] = 0; gMouseButtonsPressed[0] = false; gMouseButtonsPressed[1] = false; --- 276,281 ---- gWindowHeight = INITIAL_WINDOW_HEIGHT; gAspectRatio = (float)gWindowWidth/(float)gWindowHeight; ! gMousePosScreen[0] = 0; ! gMousePosScreen[1] = 0; gMouseButtonsPressed[0] = false; gMouseButtonsPressed[1] = false; *************** *** 347,350 **** --- 387,393 ---- SDL_Event event; + // Get the dt since the last frame. + opal::real dt = (opal::real)gTimer.GetElapsedSeconds(); + while (SDL_PollEvent(&event)) //handle events until event queue is empty { *************** *** 356,377 **** int clickPosX = event.button.x; ! int clickPosY = gWindowHeight - event.button.y; switch (event.button.button) { case SDL_BUTTON_LEFT: ! //if (event.button.state == SDL_PRESSED) ! //{ ! gMouseButtonsPressed[0] = true; ! gOldMousePos[0] = clickPosX; ! gOldMousePos[1] = clickPosY; ! //} break; case SDL_BUTTON_RIGHT: //if (event.button.state == SDL_PRESSED) //{ gMouseButtonsPressed[1] = true; ! gOldMousePos[0] = clickPosX; ! gOldMousePos[1] = clickPosY; //} break; --- 399,447 ---- int clickPosX = event.button.x; ! //int clickPosY = gWindowHeight - event.button.y; ! int clickPosY = event.button.y; switch (event.button.button) { case SDL_BUTTON_LEFT: ! { ! gMouseButtonsPressed[0] = true; ! gMousePosScreen[0] = clickPosX; ! gMousePosScreen[1] = clickPosY; ! ! // Fire a ray to find an object to pick. ! opal::Rayr r; ! opal::Point3r origin;// = getGlobalMousePos(); ! r.setOrigin(origin); ! //opal::Vec3r dir(0, 0, -10000); ! opal::Vec3r dir(getGlobalMousePos().getData()); ! r.setDir(dir); ! gRaySensor->setRay(r); ! opal::RaycastResult result = ! gRaySensor->fireRay(); ! ! std::cout << "Origin: [" << origin[0] << " " ! << origin[1] << " " << origin[2] ! << "] Dir: [" << dir[0] << " " ! << dir[1] << " " << dir[2] << "]" ! << std::endl; ! ! if (result.solid) ! { ! // Setup spring for picking. ! opal::SpringMotorData data; ! data.solid = result.solid; ! gPickingSpring->init(data); ! gPickingSpring->setGlobalAttachPoint( ! result.intersection); ! } break; + } case SDL_BUTTON_RIGHT: //if (event.button.state == SDL_PRESSED) //{ gMouseButtonsPressed[1] = true; ! gMousePosScreen[0] = clickPosX; ! gMousePosScreen[1] = clickPosY; //} break; *************** *** 389,392 **** --- 459,463 ---- case SDL_BUTTON_LEFT: gMouseButtonsPressed[0] = false; + gPickingSpring->setEnabled(false); break; case SDL_BUTTON_RIGHT: *************** *** 408,428 **** int clickPosY = gWindowHeight - event.button.y; ! int deltaMouse[2]; ! deltaMouse[0] = clickPosX - gOldMousePos[0]; ! deltaMouse[1] = clickPosY - gOldMousePos[1]; ! ! gOldMousePos[0] = clickPosX; ! gOldMousePos[1] = clickPosY; ! ! if (gMouseButtonsPressed[0] == true) ! { ! gCameraRotY += deltaMouse[0]*0.3f; ! gCameraRotX -= deltaMouse[1]*0.3f; ! } ! if (gMouseButtonsPressed[1]==true) ! { ! gCameraZoom -= deltaMouse[1]*0.3f; ! } ! break; } --- 479,484 ---- int clickPosY = gWindowHeight - event.button.y; ! gMousePosScreen[0] = clickPosX; ! gMousePosScreen[1] = clickPosY; break; } *************** *** 431,434 **** --- 487,508 ---- switch(event.key.keysym.sym) { + case SDLK_LEFT: + gCameraRotY -= gRotateSpeed; + break; + case SDLK_RIGHT: + gCameraRotY += gRotateSpeed; + break; + case SDLK_UP: + gCameraRotX -= gRotateSpeed; + break; + case SDLK_DOWN: + gCameraRotX += gRotateSpeed; + break; + case SDLK_a: + gCameraZoom -= gZoomSpeed; + break; + case SDLK_z: + gCameraZoom += gZoomSpeed; + break; case SDLK_ESCAPE: //fall through case SDLK_q: *************** *** 438,441 **** --- 512,524 ---- gPaused = !gPaused; break; + case SDLK_t: + { + opal::Force t; + t.type = opal::GLOBAL_TORQUE; + t.vec.set(0, 0, 10); + t.duration = (opal::real)0.02; + gSensorSolid->addForce(t); + break; + } //case SDLK_m: // if (METAL == gObjectMaterialType) *************** *** 693,697 **** // Advance the physics simulation. - opal::real dt = (opal::real)gTimer.GetElapsedSeconds(); if (!gPaused) { --- 776,779 ---- *************** *** 706,716 **** } // Update the performance calculations. ++gFrameCounter; gPerfTimer += dt; ! if (gPerfTimer >= gPerfOutputPeriod) { ! std::cout << ((opal::real)gFrameCounter) / gPerfTimer << ! " fps" << std::endl; gPerfTimer = 0; gFrameCounter = 0; --- 788,810 ---- } + drawPickingSpring(); + + //// Update the performance calculations. + //++gFrameCounter; + //gPerfTimer += dt; + //if (gPerfTimer >= gPerfOutputPeriod) + //{ + // std::cout << ((opal::real)gFrameCounter) / gPerfTimer << + // " fps" << std::endl; + // gPerfTimer = 0; + // gFrameCounter = 0; + //} + // Update the performance calculations. ++gFrameCounter; gPerfTimer += dt; ! if (gPerfTimer >= 0.2) { ! std::cout << gSensor->getAngle() << std::endl; gPerfTimer = 0; gFrameCounter = 0; *************** *** 723,724 **** --- 817,863 ---- } } + + opal::Point3r getGlobalMousePos() + { + // Get the mouse position in world coords. + double mvMat[16], projMat[16]; + int viewport[4]; + glGetDoublev(GL_MODELVIEW_MATRIX, mvMat); + glGetDoublev(GL_PROJECTION_MATRIX, projMat); + glGetIntegerv(GL_VIEWPORT, viewport); + double o[3]; + gluUnProject(gMousePosScreen[0], + gMousePosScreen[0], 0, mvMat, projMat, + viewport, &o[0], &o[1], &o[2]); + + return opal::Point3r((opal::real)o[0], (opal::real)o[1], + (opal::real)o[2]); + } + + void drawPickingSpring() + { + if (!gPickingSpring->isEnabled()) + { + return; + } + + glPushAttrib(GL_LIGHTING); + glDisable(GL_LIGHTING); + + // Draw a sphere at the mouse position. + opal::Point3r mousePosWorld = getGlobalMousePos(); + glPushMatrix(); + glTranslatef(mousePosWorld[0], mousePosWorld[1], 0); + gluSphere(gQuadric, 1, 20, 20); + glPopMatrix(); + + // Draw a sphere at the intersection position. + opal::Point3r globalAttachPos = gPickingSpring->getGlobalAttachPoint(); + glPushMatrix(); + glTranslatef(globalAttachPos[0], globalAttachPos[1], + globalAttachPos[2]); + gluSphere(gQuadric, 1, 20, 20); + glPopMatrix(); + + glPopAttrib(); + } |