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 的线性代数函数完成其余的计算。