簡體   English   中英

XNA相機繞Z軸旋轉

[英]XNA Camera Rotation Around Z Axis

我正在為3D游戲創建相機。 攝像機由以下變量組成:

static Vector3 cameraLookAt = new Vector3(0, 0, 0);
static Vector3 cameraPosition;
static float cameraZoom = 25; // Field of view 
const int cameraZoomNear = 3; // The furthest the camera can zoom in 
const int cameraZoomFar = 45; // The furthest the camera can zoom out 
static float cameraPitch; // Amount to change the pitch 
static float cameraRotation; // Amount to change the rotation

默認情況下,“ cameraLookAt”的位置為(0,0,0),“ cameraPosition”的位置為(0,0,10),這意味着相機位於“ cameraLookAt”位置的正上方,從而可以鳥瞰下面的物體(紅色綠色和藍色xyz平面測試對象)

可以沿x和y軸移動“ cameraLookAt”,然后相對於“ cameraLookAt”位置以及“ cameraPitch”和“ cameraRotation”的當前值來計算“ cameraPosition”

當前,您可以繞x / y軸精細移動,並更改攝像機的俯仰角度,以從鳥瞰圖轉換為地面圖。 我遇到的麻煩是使相機旋轉正常工作。

更改旋轉值后,只有更改了音高才有效-從程序啟動時的默認值開始(它直接向下看“ cameraLookAt”)

當值確實改變時,您可以繞Z軸旋轉,但視圖也會旋轉,因此,當您旋轉180度時,相機也將旋轉180度,並且視圖上下顛倒。

以下是確定“ cameraPosition”位置的代碼,我確定這些行中的固定行。

        cameraPosition = cameraLookAt + new Vector3(0, 0, 10);

        Vector3 temp = Vector3.Normalize(cameraPosition - cameraLookAt); //creates a unit length vector that points in the direction from 'lookAt' to 'position'
        cameraPosition = Vector3.Transform(cameraPosition - cameraLookAt, Matrix.CreateRotationX(cameraPitch)) + cameraLookAt;
        cameraPosition = Vector3.Transform(cameraPosition - cameraLookAt, Matrix.CreateRotationZ(cameraRotation)) + cameraLookAt;

        view = Matrix.CreateLookAt(cameraPosition, cameraLookAt, new Vector3(0.0f, 1.0f, 0.0f));
        projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(cameraZoom), graphics.GraphicsDevice.Viewport.AspectRatio, nearClip, farClip);

另外,這里還有一個問答,我發現它可以幫助我首先編碼XNA圍繞它的CreateLookAt“ Target”旋轉相機。

偏移量應旋轉而不改變其長度,然后添加到攝像機位置。

我認為應該是這樣的:

   offset = new Vector3(0, 0, 10);

   Vector3 rotatedOffset = Vector3.Transform( offset, 
                                      Matrix.CreateRotationX(cameraPitch) 
                                      * Matrix.CreateRotationZ(cameraRotation));

   cameraPosition = cameraLookAt + rotatedOffset;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM