void Camera::Reset() { Point tempP(0, 0, DEFAULT_FOCUS_LENGTH); Vector tempP2(0, 0, 0); Vector tempV(0, 1, 0); Orient(tempP, tempP2 , tempV); SetViewAngle(VIEW_ANGLE); SetNearPlane(NEAR_PLANE); SetFarPlane(FAR_PLANE); m_screenWidthRatio = 1.0f; }
void View3DAttributes::SetFromNode(DataNode *parentNode) { if(parentNode == 0) return; DataNode *searchNode = parentNode->GetNode("View3DAttributes"); if(searchNode == 0) return; DataNode *node; if((node = searchNode->GetNode("viewNormal")) != 0) SetViewNormal(node->AsDoubleArray()); if((node = searchNode->GetNode("focus")) != 0) SetFocus(node->AsDoubleArray()); if((node = searchNode->GetNode("viewUp")) != 0) SetViewUp(node->AsDoubleArray()); if((node = searchNode->GetNode("viewAngle")) != 0) SetViewAngle(node->AsDouble()); if((node = searchNode->GetNode("parallelScale")) != 0) SetParallelScale(node->AsDouble()); if((node = searchNode->GetNode("nearPlane")) != 0) SetNearPlane(node->AsDouble()); if((node = searchNode->GetNode("farPlane")) != 0) SetFarPlane(node->AsDouble()); if((node = searchNode->GetNode("imagePan")) != 0) SetImagePan(node->AsDoubleArray()); if((node = searchNode->GetNode("imageZoom")) != 0) SetImageZoom(node->AsDouble()); if((node = searchNode->GetNode("perspective")) != 0) SetPerspective(node->AsBool()); if((node = searchNode->GetNode("eyeAngle")) != 0) SetEyeAngle(node->AsDouble()); if((node = searchNode->GetNode("centerOfRotationSet")) != 0) SetCenterOfRotationSet(node->AsBool()); if((node = searchNode->GetNode("centerOfRotation")) != 0) SetCenterOfRotation(node->AsDoubleArray()); if((node = searchNode->GetNode("axis3DScaleFlag")) != 0) SetAxis3DScaleFlag(node->AsBool()); if((node = searchNode->GetNode("axis3DScales")) != 0) SetAxis3DScales(node->AsDoubleArray()); if((node = searchNode->GetNode("shear")) != 0) SetShear(node->AsDoubleArray()); if((node = searchNode->GetNode("windowValid")) != 0) SetWindowValid(node->AsBool()); }
void VtkTrackedCamera::updateView() { double x = _trackedPosition[0] * _realToVirtualScale; double y = _trackedPosition[1] * _realToVirtualScale; double z = _trackedPosition[2] * _realToVirtualScale; double angle = vtkMath::DegreesFromRadians( 2 * atan(0.5 * _screenHeight * _realToVirtualScale / y)); //double newfocal[3] = {_x + x, _y, _z + z}; //double newpos[3] = {_x + x, _y + y, _z + z}; //double viewup[3] = {0, 0, 1}; SetViewAngle(angle); //SetPosition(newpos); //SetFocalPoint(newfocal); //SetViewUp(viewup); //SetClippingRange(_zNear, _zFar); SetViewShear(x / y, z / y, 1); // see http://www.vtk.org/pipermail/vtkusers/2005-March/078735.html emit viewUpdated(); }
void ViewAttributes::SetFromNode(DataNode *parentNode) { if(parentNode == 0) return; DataNode *searchNode = parentNode->GetNode("ViewAttributes"); if(searchNode == 0) return; DataNode *node; if((node = searchNode->GetNode("viewNormal")) != 0) SetViewNormal(node->AsDoubleArray()); if((node = searchNode->GetNode("focus")) != 0) SetFocus(node->AsDoubleArray()); if((node = searchNode->GetNode("viewUp")) != 0) SetViewUp(node->AsDoubleArray()); if((node = searchNode->GetNode("viewAngle")) != 0) SetViewAngle(node->AsDouble()); if((node = searchNode->GetNode("setScale")) != 0) SetSetScale(node->AsBool()); if((node = searchNode->GetNode("parallelScale")) != 0) SetParallelScale(node->AsDouble()); if((node = searchNode->GetNode("nearPlane")) != 0) SetNearPlane(node->AsDouble()); if((node = searchNode->GetNode("farPlane")) != 0) SetFarPlane(node->AsDouble()); if((node = searchNode->GetNode("imagePan")) != 0) SetImagePan(node->AsDoubleArray()); if((node = searchNode->GetNode("imageZoom")) != 0) SetImageZoom(node->AsDouble()); if((node = searchNode->GetNode("perspective")) != 0) SetPerspective(node->AsBool()); if((node = searchNode->GetNode("windowCoords")) != 0) SetWindowCoords(node->AsDoubleArray()); if((node = searchNode->GetNode("viewportCoords")) != 0) SetViewportCoords(node->AsDoubleArray()); if((node = searchNode->GetNode("eyeAngle")) != 0) SetEyeAngle(node->AsDouble()); }
sector_t * FGLRenderer::RenderViewpoint (AActor * camera, GL_IRECT * bounds, float fov, float ratio, float fovratio, bool mainview, bool toscreen) { sector_t * lviewsector; mSceneClearColor[0] = 0.0f; mSceneClearColor[1] = 0.0f; mSceneClearColor[2] = 0.0f; R_SetupFrame (camera); SetViewArea(); // We have to scale the pitch to account for the pixel stretching, because the playsim doesn't know about this and treats it as 1:1. double radPitch = ViewPitch.Normalized180().Radians(); double angx = cos(radPitch); double angy = sin(radPitch) * glset.pixelstretch; double alen = sqrt(angx*angx + angy*angy); mAngles.Pitch = (float)RAD2DEG(asin(angy / alen)); mAngles.Roll.Degrees = ViewRoll.Degrees; // Scroll the sky mSky1Pos = (float)fmod(gl_frameMS * level.skyspeed1, 1024.f) * 90.f/256.f; mSky2Pos = (float)fmod(gl_frameMS * level.skyspeed2, 1024.f) * 90.f/256.f; if (camera->player && camera->player-players==consoleplayer && ((camera->player->cheats & CF_CHASECAM) || (r_deathcamera && camera->health <= 0)) && camera==camera->player->mo) { mViewActor=NULL; } else { mViewActor=camera; } // 'viewsector' will not survive the rendering so it cannot be used anymore below. lviewsector = viewsector; // Render (potentially) multiple views for stereo 3d float viewShift[3]; const s3d::Stereo3DMode& stereo3dMode = mainview && toscreen? s3d::Stereo3DMode::getCurrentMode() : s3d::Stereo3DMode::getMonoMode(); stereo3dMode.SetUp(); for (int eye_ix = 0; eye_ix < stereo3dMode.eye_count(); ++eye_ix) { const s3d::EyePose * eye = stereo3dMode.getEyePose(eye_ix); eye->SetUp(); SetOutputViewport(bounds); Set3DViewport(mainview); mDrawingScene2D = true; mCurrentFoV = fov; // Stereo mode specific perspective projection SetProjection( eye->GetProjection(fov, ratio, fovratio) ); // SetProjection(fov, ratio, fovratio); // switch to perspective mode and set up clipper SetViewAngle(ViewAngle); // Stereo mode specific viewpoint adjustment - temporarily shifts global ViewPos eye->GetViewShift(GLRenderer->mAngles.Yaw.Degrees, viewShift); s3d::ScopedViewShifter viewShifter(viewShift); SetViewMatrix(ViewPos.X, ViewPos.Y, ViewPos.Z, false, false); gl_RenderState.ApplyMatrices(); clipper.Clear(); angle_t a1 = FrustumAngle(); clipper.SafeAddClipRangeRealAngles(ViewAngle.BAMs() + a1, ViewAngle.BAMs() - a1); ProcessScene(toscreen); if (mainview && toscreen) EndDrawScene(lviewsector); // do not call this for camera textures. if (mainview && FGLRenderBuffers::IsEnabled()) { mBuffers->BlitSceneToTexture(); UpdateCameraExposure(); BloomScene(); TonemapScene(); ColormapScene(); LensDistortScene(); ApplyFXAA(); // This should be done after postprocessing, not before. mBuffers->BindCurrentFB(); glViewport(mScreenViewport.left, mScreenViewport.top, mScreenViewport.width, mScreenViewport.height); DrawBlend(lviewsector); } mDrawingScene2D = false; if (!stereo3dMode.IsMono() && FGLRenderBuffers::IsEnabled()) mBuffers->BlitToEyeTexture(eye_ix); eye->TearDown(); } stereo3dMode.TearDown(); gl_frameCount++; // This counter must be increased right before the interpolations are restored. interpolator.RestoreInterpolations (); return lviewsector; }
//----------------------------------------------------------------------------- // // SetupView // Setup the view rotation matrix for the given viewpoint // //----------------------------------------------------------------------------- void FGLRenderer::SetupView(float vx, float vy, float vz, DAngle va, bool mirror, bool planemirror) { SetViewAngle(va); SetViewMatrix(vx, vy, vz, mirror, planemirror); gl_RenderState.ApplyMatrices(); }