转换模型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中呈现线性深度?