让以下矩阵位于左手坐标系(主列)中
我使用的是苹果的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。在这种情况下,你真正想要的是相机正在做的一切和模型正在做的任何事情相乘,形成单位矩阵,因为你不希望在投影之前应用任何变换。
因此,在设置相机时,您希望使用与用于定位的东西相反的东西,因为根据定义,相反的东西在与原始物体相乘时会给出身份。
所以你没有把任何事情搞砸——你给出的第二个公式和你说的给出正确结果的公式是正确的。