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 'scene' 已加载):
//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 的线性代数函数来完成其余的计算。