1

OpenGL遇到这种情况时会做什么:

glVertexAttribPointer(m_shader_position, 2, ....

但是投影矩阵是平截头体,不是正交的?

2函数中的 表示这是一个二维向量。现在,如果我使用 Ortho 设置我的投影矩阵,我可以绘制这些顶点。但是,如果我只是将投影更改为平截头体,它们就不再出现,但这是什么技术原因呢?

平截头体表示 3D 视图,但管道的哪一部分阻止了 2D 顶点的出现?

4

2 回答 2

1

查看在 glVertexAttribPointer 之前绑定到 opengl 的着色器程序。您将看到您的 2D 点 [x, y] 被视为 vec4[x, y, z, w]。

  • 如果你不提供 w 它将默认为 1。
  • 如果您不提供 z,则默认情况下为 0。

如果您在屏幕上看不到该点,则表示它在截锥体之外。

于 2013-03-10T15:12:18.947 回答
1

如果你像这样离开 z 坐标,它默认为 0。如果你的顶点(转换后)在平截头体之外,它们将不会被绘制。

为了解决这个问题,您可以修改顶点着色器以将 z 坐标显式设置为常量值(或由统一提供)。

或者,根据你有多少点和你的内存需求,你可以从一开始就提供一个明确的 z 值:

glVertexAttribPointer(m_shader_position, 3, ....
于 2013-03-10T14:31:24.217 回答