【发布时间】:2016-05-31 15:28:53
【问题描述】:
我单独使用模型矩阵将我加载的模型(来自 Blender 的猴脸)传输到 vbo 从模型空间到世界空间。然而,模型非常扭曲(拉伸到无穷大),我很困惑为什么会发生这种情况。
This video 显示模型围绕 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}
我相信我在数学上犯了一个新手错误。仅从模型中可以发现任何明显的错误吗?在我的顶点着色器 (GLSL) 中,我使用以下代码行:
gl_Position = mvp * vec4(position, 1.0);
其中“mvp”是在视频中看到的结果矩阵,位置包含正在处理的模型的当前顶点的位置(在模型空间中)。我不明白为什么会出现这些扭曲,这可能是我程序的另一个方面的错误(即我没有显示足够的代码)吗?
【问题讨论】:
-
发送行矩阵时是否使用
traspose标志? -
我不这样做,我尝试这样做,但模型变得不可见,因为在我的示例中,'10' 的值将位于第四行而不是第四列,如果我这样做违反了 OpenGL 的顺序没记错。
-
不,这只是意味着您的数据不在裁剪空间的单位立方体内并被裁剪
-
现在我想起来了,我生成翻译矩阵的函数以列主要格式返回正确的矩阵,我多次尝试换位,尽管它可能仍然是我正在犯的错误.编辑:没有透视投影,你知道默认的远剪辑,就世界空间而言?
-
我只是将浮点数从 10 减少到 0.5,并缩小了模型。现在可以正确渲染了,非常感谢 Beyeler!