Opengl 理解ASIMP&x27;照相机输出
我正在写一个程序来显示3d场景使用的是MP3.0 我的工作流程是:Opengl 理解ASIMP&x27;照相机输出,opengl,3d,assimp,Opengl,3d,Assimp,我正在写一个程序来显示3d场景使用的是MP3.0 我的工作流程是: Blender2.71导出fbx Assimp读取fbx文件 aiCamera中的摄影机属性很奇怪 我在搅拌机里有一个摄像头,带有: (搅拌机坐标) 位置:(0,-5,0) 旋转:(90,0,0) 这应该是一个简单的前视摄像头 因为ASIMP将沿x轴旋转所有型号-90 我想阿西姆会把这架照相机换成 (OpenGL的坐标(x:右)(y:向上)(z:屏幕外)) 职位:(0,-5,0) 向上:(0,0,1) 看:(0,1,0)
aiCamera
中的摄影机属性很奇怪
我在搅拌机里有一个摄像头,带有: (搅拌机坐标) 位置:
(0,-5,0)
旋转:(90,0,0)
这应该是一个简单的前视摄像头
因为ASIMP将沿x轴旋转所有型号
-90
我想阿西姆会把这架照相机换成
(OpenGL的坐标(x:右)(y:向上)(z:屏幕外))
职位:(0,-5,0)
向上:(0,0,1)
看:(0,1,0)
但是在
aiCamera
结构中,我得到了:
位置:(5,0,0)
mUp:(0,1,0)
mLookAt:(0,0,1)
使用aiCamera的正确方法是什么?aiCamera存在于aiNode图中。引用aiCamera和aiNode的文档 aiCamera:摄影机在节点图[…]中具有表示形式。这意味着,任何值(如“注视向量”)都不是绝对值,它们是相对于由与摄影机对应的节点定义的坐标系的 aNode:摄像机和灯光被指定给特定的节点名称-如果有多个节点具有此名称,则它们将被指定给每个节点 因此,在节点图中的某个位置,有一个节点与摄影机同名。此注释包含与相机坐标系对应的齐次变换矩阵。乘积T*v将齐次向量v从相机坐标系转换到世界坐标系。(将根坐标系表示为世界坐标系,并假定摄影机的父坐标系为根坐标系) mPosition、mUp和mLookAt在摄影机坐标系的坐标中给出,因此它们必须转换为世界坐标系。重要的是要区分作为空间点的位置和作为方向向量的mUp和mLookAt。变换矩阵由旋转矩阵R和平移向量t组成
R | t
T = --------------
0 0 0 | 1
世界坐标中的位置计算为mPositionWorld=T*mPosition
,而方向向量计算为mLookAtWorld=R*mLookAt
和mUpWorld=R*mUp
在C++中,变换矩阵可以通过以下方式找到(假设AISCIEN场景)已加载:
剩下的计算可以使用Assimp的线性代数函数完成
//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;