OpenGL GLM旋转3D立方体时lookAt仅旋转屏幕坐标而非世界坐标问题
问题原因及修复方案
核心错误:矩阵乘法顺序颠倒
GLM默认采用列主序存储矩阵,符合OpenGL标准的列向量右乘规则,你在CPU侧计算的mvp = Projection * View * Model对应的变换逻辑是「顶点坐标先乘模型矩阵、再乘视图矩阵、最后乘投影矩阵」,但你在着色器中把顶点向量放在了矩阵左侧,相当于执行了行向量左乘逻辑,完全颠倒了变换顺序,才会出现看起来是整个屏幕坐标旋转而非相机绕立方体旋转的现象。
其他次要检查点
- 确认你已将CPU侧计算完成的
mvp矩阵正确传递到着色器的camera_mat4uniform变量 - 检查窗口宽高变量拼写:你代码中写的
window_hight属于拼写错误,正确拼写为window_height,宽高比错误会导致画面拉伸变形
修正后的GLSL代码
uniform mat4 camera_mat4; void main() { // 调整顺序:矩阵左乘列向量 vec4 pos = camera_mat4 * vec4(vertexPosition_modelspace, 1.0); gl_Position = pos; }
内容的提问来源于stack exchange,提问作者capslpop
相关产品推荐
相关产品推荐

