C++ OpenGL-矩阵逻辑错误
我单独使用模型矩阵将我加载的模型(Blender中的猴子脸)从模型空间传输到世界空间的vbo中。然而,模型是难以置信的扭曲(延伸到无穷大),我很困惑为什么会发生这种情况 显示模型围绕y轴不断旋转,试图清晰显示我的问题。我确信我加载的OBJ模型是有效的。将熔岩纹理绑定到模型以使其更易于查看 视频还显示了控制台,其中显示了我发送到顶点着色器的当前矩阵。在内存中,矩阵按行的主要顺序表示,因此以下矩阵:C++ OpenGL-矩阵逻辑错误,c++,opengl,matrix,C++,Opengl,Matrix,我单独使用模型矩阵将我加载的模型(Blender中的猴子脸)从模型空间传输到世界空间的vbo中。然而,模型是难以置信的扭曲(延伸到无穷大),我很困惑为什么会发生这种情况 显示模型围绕y轴不断旋转,试图清晰显示我的问题。我确信我加载的OBJ模型是有效的。将熔岩纹理绑定到模型以使其更易于查看 视频还显示了控制台,其中显示了我发送到顶点着色器的当前矩阵。在内存中,矩阵按行的主要顺序表示,因此以下矩阵: |1 0 0 0 | |0 1 0 0 | |0 0 1 10| |0 0 0 1 | 当下面的C
|1 0 0 0 |
|0 1 0 0 |
|0 0 1 10|
|0 0 0 1 |
当下面的C++数组浮动:时,将p>发送到顶点着色器
{1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 10, 0, 0, 0, 1}
我相信我在数学上犯了一个新手错误。单从模型上看,是否有明显的错误?在我的顶点着色器(GLSL)中,我使用以下代码行:
gl_Position = mvp * vec4(position, 1.0);
其中“mvp”是在视频中看到的结果矩阵,位置包含正在处理的模型的当前顶点的位置(在模型空间中)。我不明白为什么会发生这些失真,这可能是我程序的另一个方面的错误(即我没有显示足够的代码)?需要对结果矩阵进行换位。以前没有解决此问题,因为位置超过了默认的远剪裁,所以模型被剪裁。在发送行矩阵时是否使用
traspose
标志?我没有,我尝试过这样做,模型变得不可见,因为我的示例中的“10”值将位于第四行而不是第四列,如果我没记错的话,这与OpenGL的顺序是相反的。不,这只是意味着你的数据不在剪辑空间的单位立方体内,并且被剪辑。我现在想起来了,我生成转换矩阵的函数以列主格式返回正确的矩阵,我多次尝试了转换,尽管这可能仍然是我犯的错误。编辑:在没有透视投影的情况下,您知道默认的远距剪辑(以世界空间为单位)吗?我只是将浮动从10减少到了0.5,并缩小了模型。它现在渲染正确,非常感谢贝勒!