Ios 投影视图矩阵,opengl es。网间网操作系统

Ios 投影视图矩阵,opengl es。网间网操作系统,ios,opengl-es,linear-algebra,Ios,Opengl Es,Linear Algebra,让下列矩阵位于左手坐标系中(主列) 我使用的是apple的GLKMatrix4x4结构和函数,因此可以假设数学运算是正确的 我希望以下内容将生成正确的矩阵 projectionViewModel = camera.projection * camera.view * model.view 但是,这是不正确的,因为模型开始围绕摄影机的平移偏移旋转 但是,当我做以下操作时,结果是正确的 projectionViewModel = camera.projection * camera.inverse

让下列矩阵位于左手坐标系中(主列)

我使用的是apple的GLKMatrix4x4结构和函数,因此可以假设数学运算是正确的

我希望以下内容将生成正确的矩阵

projectionViewModel = camera.projection * camera.view * model.view
但是,这是不正确的,因为模型开始围绕摄影机的平移偏移旋转

但是,当我做以下操作时,结果是正确的

projectionViewModel = camera.projection * camera.inverseView * model.view
我的问题是,我在哪里搞砸了其他事情?或者这是生成projectionViewModel矩阵的正确方法

 GLKMatrix4 modelView  = GLKMatrix4Multiply(*[_scene.camera inverseView],*[_frame worldMatrix]);

 GLKMatrix4 projectionViewModel =  GLKMatrix4Multiply(*[_scene.camera proj],modelView);

考虑一下,当一个物体直接放置在相机上时,你希望发生什么。所以你有了camera.view=model.view。在这种情况下,您真正想要的是相机正在做的任何事情和模型正在做的任何事情相乘,以形成单位矩阵,因为您不希望在投影之前应用任何变换

因此,在设置相机时,您希望使用任何用于定位的对象的倒数,因为根据定义,倒数就是与原始对象相乘时将给出标识的对象


所以你没有搞砸任何事情——你给出的第二个公式和你说的给出正确结果的公式都是正确的。

最后我自己又猜了两遍
projectionViewModel = camera.projection * camera.inverseView * model.view