mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-12-17 17:05:37 +00:00
CCamera: Pass vectors by reference
Avoids a few redundant copies.
This commit is contained in:
@@ -16,7 +16,7 @@ CCamera::CCamera()
|
||||
|
||||
// todo: make it actually look at the target!
|
||||
// don't actually use this constructor, it's unfinished and won't work properly
|
||||
CCamera::CCamera(CVector3f Position, CVector3f /*Target*/)
|
||||
CCamera::CCamera(const CVector3f& Position, const CVector3f& /*Target*/)
|
||||
: mPosition(Position)
|
||||
, mYaw(-Math::skHalfPi)
|
||||
{
|
||||
@@ -65,7 +65,7 @@ void CCamera::Zoom(float Amount)
|
||||
mFrustumPlanesDirty = true;
|
||||
}
|
||||
|
||||
void CCamera::Snap(CVector3f Position)
|
||||
void CCamera::Snap(const CVector3f& Position)
|
||||
{
|
||||
mPosition = Position;
|
||||
mYaw = -Math::skHalfPi;
|
||||
@@ -119,7 +119,7 @@ void CCamera::ProcessMouseInput(FKeyInputs KeyFlags, FMouseInputs MouseFlags, fl
|
||||
}
|
||||
}
|
||||
|
||||
CRay CCamera::CastRay(CVector2f DeviceCoords) const
|
||||
CRay CCamera::CastRay(const CVector2f& DeviceCoords) const
|
||||
{
|
||||
const CMatrix4f InverseVP = (ViewMatrix().Transpose() * ProjectionMatrix().Transpose()).Inverse();
|
||||
|
||||
|
||||
@@ -54,15 +54,15 @@ class CCamera
|
||||
|
||||
public:
|
||||
CCamera();
|
||||
CCamera(CVector3f Position, CVector3f Target);
|
||||
explicit CCamera(const CVector3f& Position, const CVector3f& Target);
|
||||
|
||||
void Pan(float XAmount, float YAmount);
|
||||
void Rotate(float XAmount, float YAmount);
|
||||
void Zoom(float Amount);
|
||||
void Snap(CVector3f Position);
|
||||
void Snap(const CVector3f& Position);
|
||||
void ProcessKeyInput(FKeyInputs KeyFlags, double DeltaTime);
|
||||
void ProcessMouseInput(FKeyInputs KeyFlags, FMouseInputs MouseFlags, float XMovement, float YMovement);
|
||||
CRay CastRay(CVector2f DeviceCoords) const;
|
||||
CRay CastRay(const CVector2f& DeviceCoords) const;
|
||||
void LoadMatrices() const;
|
||||
CTransform4f GetCameraTransform() const;
|
||||
|
||||
@@ -73,10 +73,10 @@ public:
|
||||
void SetOrbitDistance(float Distance);
|
||||
|
||||
// Inline Accessors
|
||||
CVector3f Position() const { UpdateTransform(); return mPosition; }
|
||||
CVector3f Direction() const { UpdateTransform(); return mDirection; }
|
||||
CVector3f UpVector() const { UpdateTransform(); return mUpVector; }
|
||||
CVector3f RightVector() const { UpdateTransform(); return mRightVector; }
|
||||
const CVector3f& Position() const { UpdateTransform(); return mPosition; }
|
||||
const CVector3f& Direction() const { UpdateTransform(); return mDirection; }
|
||||
const CVector3f& UpVector() const { UpdateTransform(); return mUpVector; }
|
||||
const CVector3f& RightVector() const { UpdateTransform(); return mRightVector; }
|
||||
float Yaw() const { return mYaw; }
|
||||
float Pitch() const { return mPitch; }
|
||||
float FieldOfView() const { return 55.f; }
|
||||
|
||||
@@ -19,8 +19,8 @@ void CRenderBucket::CSubBucket::Sort(const CCamera* pkCamera, bool DebugVisualiz
|
||||
{
|
||||
std::stable_sort(mRenderables.begin(), mRenderables.begin() + mSize,
|
||||
[&, pkCamera](const auto& rkLeft, const auto& rkRight) {
|
||||
const CVector3f CamPos = pkCamera->Position();
|
||||
const CVector3f CamDir = pkCamera->Direction();
|
||||
const CVector3f& CamPos = pkCamera->Position();
|
||||
const CVector3f& CamDir = pkCamera->Direction();
|
||||
|
||||
const CVector3f DistL = rkLeft.AABox.ClosestPointAlongVector(CamDir) - CamPos;
|
||||
const CVector3f DistR = rkRight.AABox.ClosestPointAlongVector(CamDir) - CamPos;
|
||||
|
||||
@@ -91,7 +91,7 @@ SRayIntersection CLightNode::RayNodeIntersectTest(const CRay& rkRay, uint32 Asse
|
||||
|
||||
const CVector3f PlaneForward = -rkViewInfo.pCamera->Direction();
|
||||
const CVector3f PlaneRight = -rkViewInfo.pCamera->RightVector();
|
||||
const CVector3f PlaneUp = rkViewInfo.pCamera->UpVector();
|
||||
const CVector3f& PlaneUp = rkViewInfo.pCamera->UpVector();
|
||||
const CQuaternion PlaneRot = CQuaternion::FromAxes(PlaneRight, PlaneForward, PlaneUp);
|
||||
|
||||
const CVector3f RotatedHitPoint = PlaneRot.Inverse() * RelHitPoint;
|
||||
|
||||
@@ -392,7 +392,7 @@ SRayIntersection CScriptNode::RayNodeIntersectTest(const CRay& rkRay, uint32 Ass
|
||||
|
||||
const CVector3f PlaneForward = -rkViewInfo.pCamera->Direction();
|
||||
const CVector3f PlaneRight = -rkViewInfo.pCamera->RightVector();
|
||||
const CVector3f PlaneUp = rkViewInfo.pCamera->UpVector();
|
||||
const CVector3f& PlaneUp = rkViewInfo.pCamera->UpVector();
|
||||
const CQuaternion PlaneRot = CQuaternion::FromAxes(PlaneRight, PlaneForward, PlaneUp);
|
||||
|
||||
const CVector3f RotatedHitPoint = PlaneRot.Inverse() * RelHitPoint;
|
||||
|
||||
Reference in New Issue
Block a user