//---------------------------------------------------------------------------- void EditRenderView_Scene::_RolateCamera(float horz, float vert) { Scene *scene = PX2_PROJ.GetScene(); CameraActor *camActor = scene->GetUseCameraActor(); if (VT_PERSPECTIVE == mViewType) { AVector rVector; AVector dVector; AVector uVector; camActor->GetRDUVector(rVector, dVector, uVector); // horz HMatrix incrH(AVector::UNIT_Z, -horz*0.5f); dVector = incrH * dVector; uVector = incrH * uVector; rVector = incrH * rVector; // vert Matrix3f kIncrV(rVector, -vert*0.5f); dVector = kIncrV * dVector; uVector = kIncrV * uVector; dVector.Normalize(); float dVectorAdj = dVector.Dot(AVector::UNIT_Z); float dVectorAdj1 = dVector.Dot(-AVector::UNIT_Z); if (dVectorAdj > 0.9f || dVectorAdj1 > 0.9f) return; AVector::Orthonormalize(dVector, uVector, rVector); camActor->LocalTransform.SetRotate(HMatrix(rVector, dVector, uVector, AVector::ZERO, true)); } }
//---------------------------------------------------------------------------- void EditRenderView_Scene::_RoundCamera(float horz, float vert) { Scene *scene = PX2_PROJ.GetScene(); CameraActor *camActor = scene->GetUseCameraActor(); if (mViewType == VT_PERSPECTIVE) { PX2::Object *obj = PX2_SELECTION.GetFirstObject(); bool hasTarget = false; APoint pos; Movable *mov = DynamicCast<Movable>(obj); if (mov) { pos = mov->WorldTransform.GetTranslate(); hasTarget = true; } if (hasTarget) { const APoint &camPos = camActor->LocalTransform.GetTranslate(); AVector rVector; AVector dVector; AVector uVector; camActor->GetRDUVector(rVector, dVector, uVector); AVector targetDir = pos - camPos; float targetLength = targetDir.Normalize(); // horz HMatrix incrH(AVector::UNIT_Z, -horz*0.1f); targetDir = incrH * targetDir; dVector = incrH * dVector; uVector = incrH * uVector; rVector = incrH * rVector; HMatrix incrV(rVector, -vert*0.1f); targetDir = incrV * targetDir; dVector = incrV * dVector; uVector = incrV * uVector; APoint newPos = pos - targetDir*targetLength; camActor->LocalTransform.SetTranslate(newPos); AVector::Orthonormalize(dVector, uVector, rVector); camActor->LocalTransform.SetRotate( HMatrix(rVector, dVector, uVector, AVector::ZERO, true)); } } }
//---------------------------------------------------------------------------- void EditRenderView_Scene::_MoveCamera(float horz, float vert) { Scene *scene = PX2_PROJ.GetScene(); if (!scene) return; CameraActor *camActor = scene->GetUseCameraActor(); if (camActor) { APoint position = camActor->LocalTransform.GetTranslate(); AVector rVector; AVector dVector; AVector uVector; camActor->GetRDUVector(rVector, dVector, uVector); if (mViewType == VT_PERSPECTIVE) { dVector.Z() = 0.0f; dVector.Normalize(); rVector.Z() = 0.0f; rVector.Normalize(); position += dVector * vert; position -= rVector * horz; } else if (mViewType == VT_TOP) { position.Y() += vert * 1.0f; position.X() -= horz * 1.0f; } else if (mViewType == VT_LEFT) { position.Z() += vert * 1.0f; position.Y() += horz * 1.0f; } else if (mViewType == VT_FRONT) { position.Z() += vert * 1.0f; position.X() -= horz * 1.0f; } camActor->LocalTransform.SetTranslate(position); } }