aiCamera存在於aiNode圖中。引用的文檔aiCamera和aiNode
aiCamera:相機具有節點圖中的表示[...]。這意味着,諸如查看矢量之類的任何值都不是絕對的,它們相對於與相機對應的節點定義的座標系。
aiNode:攝像機和指示燈被分配給特定的節點名稱 - 如果有多個節點具有該名稱,則將它們分配給它們中的每一個。
因此,在您的節點圖的某個地方有一個與您的相機名稱相同的節點。本筆記包含與您的相機座標系對應的齊次變換矩陣。乘積T * v將把攝像機座標系統中的齊次向量v轉換爲世界座標系統。 (將根座標系表示爲世界系統,並假定相機的父母是根)。
的mPosition,MUP和mLookAt在座標系中的攝像機座標給出,所以必須轉換到世界座標系。區分作爲空間點的mPosition和作爲方向矢量的mUp和mLookAt是很重要的。變換矩陣由旋轉矩陣R和平移矢量t組成。在世界
R | t
T = --------------
0 0 0 | 1
mPosition座標被計算爲mPositionWorld = T*mPosition
,而方向矢量被作爲mLookAtWorld = R*mLookAt
和mUpWorld = R*mUp
在C++中的變換矩陣可以由以下(假設aiScene「場景」中找到計算已加載):
//find the camera's mLookAt
aiCamera** cameraList = scene->mCameras;
aiCamera* camera = cameraList[0] //Using the first camera as an example
mVector3D camera->mLookAt;
//find the transformation matrix corresponding to the camera node
aiNode* rootNode = scene->mRootNode;
aiNode* cameraNode = rootNode->FindNode(camera->mName);
aiMatrix4x4 cameraTransformationMatrix = cameraNode->mTransformation;
計算的其餘部分,然後可以使用Assimp的線性代數函數來完成。