转换模型matrix

用glm设置ViewMatrix很容易:

glm::lookAt(Position, Direction, UpVector); 

但如果我尝试使用modelMatrix函数,我会得到comfusing值(模型不在正确的位置,也旋转看起来不正确)。 我只是想设置一个对象相同的方式设置相机。 我可以使用lookat funktion并在之后做一些更改吗? 或者我必须为此编写自己的function? 如果是的话,怎么样?

我用这个固定了位置:

 m_Orientation = glm::lookAtLH(Position, Direction, UpVector); m_Orientation[3][0] = -m_Orientation[3][0]; m_Orientation[3][1] = -m_Orientation[3][1]; m_Orientation[3][2] = -m_Orientation[3][2]; 

也在vertexshader里面我使用这个:

 gl_Position = CameraMatrix * ModelMatrix * Pos; 

其中CameraMatrix是一个viewProjectionMatrix,ModelMatrix(我的问题)和Pos是我的顶点在模型空间的位置

在渲染中,场景的每个网格通常由模型matrix,视图matrix和投影matrix进行变换。

  • 投影matrix:
    投影matrix描述了从场景的3D点到视口的2D点的映射。 投影matrix从视图空间转换到剪辑空间,剪辑空间中的坐标在(-1,-1,-1)到(1,1,1)的范围内转换为归一化设备坐标(NDC)通过用剪辑坐标的w分量分割。

投影

  • 查看matrix:
    视图matrix描述了场景的方向和位置。 视图matrix从Wolrd空间转换到视图(眼睛)空间。 在视口的坐标系中,X轴指向左侧,Y轴向上,Z轴不在视图中(注意在右侧系统中,Z轴是X轴的叉积,轴和Y轴)。

视图

  • 模型matrix:
    模型matrix定义场景中的网格的位置,oriantation和相对大小。 模型matrix将顶点位置从网格变换到世界空间。

模型

模型matrix看起来像这样:

 ( X-axis.x, X-axis.y, X-axis.z, 0 ) ( Y-axis.x, Y-axis.y, Y-axis.z, 0 ) ( Z-axis.x, Z-axis.y, Z-axis.z, 0 ) ( trans.x, trans.y, trans.z, 1 ) 

另请参阅以下问题的答案:

  • OpenGL用不同的轴旋转多个对象
  • 如何在片段着色器中使用gl_FragCoord.z在现代OpenGL中呈现线性深度?
    Interesting Posts