//---------------------------------------------------------------------------- void Project::SetScene(Scene *scene) { if (mScene) { mScene->GoOutEventWorld(); mScene = 0; mSceneRenderStep->SetCamera(0); PX2_GR.SetCurEnvirParam(0); } mScene = scene; mSceneRenderStep->SetNode(mScene); if (mScene) { mScene->ComeInEventWorld(); PX2_GR.SetCurEnvirParam(mScene->GetEnvirParam()); CameraActor *camActor = mScene->GetUseCameraActor(); if (camActor) { Camera *camera = camActor->GetCamera(); Renderer::GetDefaultRenderer()->SetCamera(camera); mSceneRenderStep->SetCamera(camera); } else { mSceneRenderStep->SetCamera(0); } } else { mSceneRenderStep->SetCamera(0); } //mSceneRenderStep->SetSize(mSize); }
//---------------------------------------------------------------------------- void EditRenderView_Scene::_ZoomCamera(float zoom) { RenderStep *renderStep = PX2_PROJ.GetSceneRenderStep(); const Sizef &size = renderStep->GetSize(); Scene *scene = PX2_PROJ.GetScene(); if (!scene) return; CameraActor *camActor = scene->GetUseCameraActor(); if (camActor) { APoint position = camActor->LocalTransform.GetTranslate(); AVector dir = camActor->GetCamera()->GetDVector(); dir.Normalize(); if (VT_PERSPECTIVE == mViewType) { position += dir*zoom; camActor->LocalTransform.SetTranslate(position); } else if (VT_TOP == mViewType) { float rMin = 0.0f; float rMax = 0.0f; float uMin = 0.0f; float uMax = 0.0f; float dMin = 0.0f; float dMax = 0.0f; float orthoFrustumMin = 1.0f; camActor->GetCamera()->GetFrustum(dMin, dMax, uMin, uMax, rMin, rMax); uMin += (zoom * 1.0f); if (uMin > -orthoFrustumMin) uMin = -orthoFrustumMin; uMax = -uMin; rMin = uMin * size.Width / size.Height; rMax = -rMin; camActor->GetCamera()->SetFrustum(dMin, dMax, uMin, uMax, rMin, rMax); } else if (VT_FRONT == mViewType) { float rMin = 0.0f; float rMax = 0.0f; float uMin = 0.0f; float uMax = 0.0f; float dMin = 0.0f; float dMax = 0.0f; float orthoFrustumMin = 1.0f; camActor->GetCamera()->GetFrustum(dMin, dMax, uMin, uMax, rMin, rMax); uMin += (zoom * 1.0f); if (uMin > -orthoFrustumMin) uMin = -orthoFrustumMin; uMax = -uMin; rMin = uMin * size.Width / size.Height; rMax = -rMin; camActor->GetCamera()->SetFrustum(dMin, dMax, uMin, uMax, rMin, rMax); } } }