Ejemplo n.º 1
0
//----------------------------------------------------------------------------
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);
		}
	}
}