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的线性代数函数来完成。