void SoXipDicomExaminer::GLRender( SoGLRenderAction* action ) { if (mViewAll) { SoXipDataImage* xipImage = ((SoXipSFDataImage *)mImage->getField(SbName("image")))->getValue(); if( !xipImage ) return ; SbXipImage* image = xipImage->get(); if( image ) adjustCamera( action, image->getModelMatrix() ); // Store the information of the current displayed image mImageModelMatrix = image->getModelMatrix(); mViewAll = FALSE; } if( mViewBoundingBox ) { adjustCamera( action, boundingBox.getValue() ); mViewBoundingBox = false; } // Set the Dicom Element setElement( action ); mImageSwitch->enableNotify( FALSE ); ((SoSFInt32 *)mImageSwitch->getField(SbName("whichChild")))->setValue( drawImage.getValue() ? 0 : -1 ); mImageSwitch->enableNotify( TRUE ); SoXipKit::GLRender( action ); }
void display(void){ adjustCamera(); glClear(GL_COLOR_BUFFER_BIT); giveTexture(); glPushMatrix(); glTranslatef(demonX,demonY,0); giveTextureDemon(); glPopMatrix(); glPushMatrix(); { //translating to the left-bottom corner of our boundary if(jumped){ moveCannon(); } glTranslatef(cannonBaseX ,cannonBaseY,0); glColor3f(BLACK); drawObstacles(); //tranlating to the cannon's bottom glRotatef(rot_angle , 0 , 0 , 1); drawCannon(); drawPiston(); //draw Cannon Ball curBall->drawUnreleased(); } glPopMatrix(); displayScoreboard(); updateDemon(); //drawDemon(); manageTurtles(); //for every released ball... for(int i=0;i<balls.size();i++){ balls[i]->drawReleased(); //cout << balls[i]->ballX << " " << balls[i]->ballY << " " << balls[i]->ballVelX << " " << balls[i]->ballVelY << endl; if(balls[i]->stoped()){ removeBall(i); } } ballTurtle(); ballDemon(); turtleCannon(); glFlush(); glutSwapBuffers(); }
void CharacterGame::update(long elapsedTime) { Vector2 direction; if (_gamepad->getButtonState(0) == Gamepad::BUTTON_PRESSED) { // Jump while the gamepad button is being pressed jump(); } if (_gamepad->isJoystickActive(0)) { // Get joystick direction direction = _gamepad->getJoystickState(0); } else { // Construct direction vector from keyboard input if (_keyFlags & NORTH) direction.y = 1; else if (_keyFlags & SOUTH) direction.y = -1; if (_keyFlags & EAST) direction.x = 1; else if (_keyFlags & WEST) direction.x = -1; direction.normalize(); if ((_keyFlags & RUNNING) == 0) direction *= 0.5f; } // Update character animation and velocity if (direction.isZero()) { play("idle", true); _character->setVelocity(Vector3::zero()); } else { bool running = (direction.lengthSquared() > 0.75f); float speed = running ? RUN_SPEED : WALK_SPEED; play(running ? "running" : "walking", true, 1.0f); // Orient the character relative to the camera so he faces the direction we want to move. const Matrix& cameraMatrix = _scene->getActiveCamera()->getNode()->getWorldMatrix(); Vector3 cameraRight, cameraForward; cameraMatrix.getRightVector(&cameraRight); cameraMatrix.getForwardVector(&cameraForward); // Get the current forward vector for the mesh node (negate it since the character was modelled facing +z) Vector3 currentHeading(-_characterMeshNode->getForwardVectorWorld()); // Construct a new forward vector for the mesh node Vector3 newHeading(cameraForward * direction.y + cameraRight * direction.x); // Compute the rotation amount based on the difference between the current and new vectors float angle = atan2f(newHeading.x, newHeading.z) - atan2f(currentHeading.x, currentHeading.z); if (angle > MATH_PI) angle -= MATH_PIX2; else if (angle < -MATH_PI) angle += MATH_PIX2; angle *= (float)elapsedTime * 0.001f * MATH_PIX2; _characterMeshNode->rotate(Vector3::unitY(), angle); // Update the character's velocity Vector3 velocity = -_characterMeshNode->getForwardVectorWorld(); velocity.normalize(); velocity *= speed; _character->setVelocity(velocity); } // Adjust camera to avoid it from being obstructed by walls and objects in the scene. adjustCamera(elapsedTime); // Project the character's shadow node onto the surface directly below him. PhysicsController::HitResult hitResult; Vector3 v = _character->getNode()->getTranslationWorld(); if (getPhysicsController()->rayTest(Ray(Vector3(v.x, v.y + 1.0f, v.z), Vector3(0, -1, 0)), 100.0f, &hitResult)) _characterShadowNode->setTranslation(Vector3(hitResult.point.x, hitResult.point.y + 0.1f, hitResult.point.z)); }
int main(int argc, char **argv) { int opt; ImageInput* pImageInput = 0; int inputCount = 0; std::string outputDir; std::string logLevel = "ERROR"; char cmd = 0; int cmdCount = 0; while ((opt = getopt(argc, argv, "i:c:ltaws:o:v:h")) != -1) { switch (opt) { case 'i': pImageInput = new DirectoryInput(Directory(optarg, ".png")); inputCount++; break; case 'c': pImageInput = new CameraInput(atoi(optarg)); inputCount++; break; case 'l': case 't': case 'a': case 'w': cmd = opt; cmdCount++; break; case 'o': cmd = opt; cmdCount++; outputDir = optarg; break; case 's': delay = atoi(optarg); break; case 'v': logLevel = optarg; break; case 'h': default: usage(argv[0]); exit(EXIT_FAILURE); break; } } if (inputCount != 1) { std::cerr << "*** You should specify exactly one camera or input directory!\n\n"; usage(argv[0]); exit(EXIT_FAILURE); } if (cmdCount != 1) { std::cerr << "*** You should specify exactly one operation!\n\n"; usage(argv[0]); exit(EXIT_FAILURE); } configureLogging(logLevel, cmd == 'a'); switch (cmd) { case 'o': pImageInput->setOutputDir(outputDir); capture(pImageInput); break; case 'l': learnOcr(pImageInput); break; case 't': testOcr(pImageInput); break; case 'a': adjustCamera(pImageInput); break; case 'w': writeData(pImageInput); break; } delete pImageInput; exit(EXIT_SUCCESS); }