簡體   English   中英

DirectX相機旋轉的錯誤控制?

[英]Error control of directx camera rotation?

我使用鼠標來控制程序中的相機旋轉(使用Directx 9.0c)。 鼠標X控制攝像機圍繞“向上矢量”旋轉,鼠標Y控制攝像機圍繞“右矢量”旋轉。 旋轉計算如下: void Camera::RotateCameraUp(float angle) { D3DXMATRIX RoMatrix; D3DXMatrixRotationAxis(&RoMatrix, &vUp, angle); D3DXVec3TransformCoord(&vLook, &vLook, &RoMatrix); D3DXVec3TransformCoord(&vRight, &vRight, &RoMatrix); } void Camera::RotateCameraRight(float angle) { D3DXMATRIX RoMatrix; D3DXMatrixRotationAxis(&RoMatrix, &vRight, angle); D3DXVec3TransformCoord(&vLook, &vLook, &RoMatrix); D3DXVec3TransformCoord(&vUp, &vUp, &RoMatrix); } void Camera::RotateCameraUp(float angle) { D3DXMATRIX RoMatrix; D3DXMatrixRotationAxis(&RoMatrix, &vUp, angle); D3DXVec3TransformCoord(&vLook, &vLook, &RoMatrix); D3DXVec3TransformCoord(&vRight, &vRight, &RoMatrix); } void Camera::RotateCameraRight(float angle) { D3DXMATRIX RoMatrix; D3DXMatrixRotationAxis(&RoMatrix, &vRight, angle); D3DXVec3TransformCoord(&vLook, &vLook, &RoMatrix); D3DXVec3TransformCoord(&vUp, &vUp, &RoMatrix); } void Camera::RotateCameraUp(float angle) { D3DXMATRIX RoMatrix; D3DXMatrixRotationAxis(&RoMatrix, &vUp, angle); D3DXVec3TransformCoord(&vLook, &vLook, &RoMatrix); D3DXVec3TransformCoord(&vRight, &vRight, &RoMatrix); } void Camera::RotateCameraRight(float angle) { D3DXMATRIX RoMatrix; D3DXMatrixRotationAxis(&RoMatrix, &vRight, angle); D3DXVec3TransformCoord(&vLook, &vLook, &RoMatrix); D3DXVec3TransformCoord(&vUp, &vUp, &RoMatrix); }假設圍繞Up或Right向量的旋轉不應導致圍繞“ LookAt”向量的旋轉,但是如果我將鼠標轉一圈並在起點處停止,則發生了圍繞“ LookAt”向量的旋轉。 我認為這是因為計算時出現錯誤,但我不知道如何消除或控制它。 任何想法?

這是一個普遍的問題。 您應用許多旋轉,隨着時間的推移,四舍五入誤差加起來。 一段時間后,三個向量vUpvLookvRight不再歸一化並且正交。 我將使用以下兩個選項之一:

1.不要存儲vLookvRight 相反,只需存儲2個角度。 假設x是正確的,y是頂部,z是后退,請存儲a)視圖軸與xz平面之間的角度,以及b)視圖軸在xz-Plane上的投影與z軸之間的角度或x軸。 根據鼠標移動來更新這些角度,並vRight計算vLookvRight

2.將vRight的y分量設置為0,因為vRight應該在xz平面中。 然后重新正交化向量(您知道向量應該彼此垂直並且長度為1)。 因此,在計算了新的vLookvRight ,請應用以下更正:

vRight.y = 0
vRight = Normalize(vRight)
vUp = Normalize(Cross(vLook, vRight))
vLook = Normalize(Cross(vRight, vUp))

暫無
暫無

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

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