Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL-矩阵逻辑错误_C++_Opengl_Matrix - Fatal编程技术网

C++ OpenGL-矩阵逻辑错误

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

我单独使用模型矩阵将我加载的模型(Blender中的猴子脸)从模型空间传输到世界空间的vbo中。然而,模型是难以置信的扭曲(延伸到无穷大),我很困惑为什么会发生这种情况

显示模型围绕y轴不断旋转,试图清晰显示我的问题。我确信我加载的OBJ模型是有效的。将熔岩纹理绑定到模型以使其更易于查看

视频还显示了控制台,其中显示了我发送到顶点着色器的当前矩阵。在内存中,矩阵按行的主要顺序表示,因此以下矩阵:

|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,并缩小了模型。它现在渲染正确,非常感谢贝勒!