试图在3D空间中渲染2D点

时间:2013-03-10 14:01:47

标签: opengl opengl-es

OpenGL遇到这个时会做什么:

glVertexAttribPointer(m_shader_position, 2, ....

但是投影矩阵是Frustum,而不是正交?

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

视锥体表示3D视图,但管道的哪个部分会阻止2D顶点出现?

2 个答案:

答案 0 :(得分:1)

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

要解决此问题,您可以修改顶点着色器,将z坐标显式设置为常量值(或由均匀值提供)。

或者,根据你拥有的点数和你的记忆要求,你可以从头开始提供一个明确的z值:

glVertexAttribPointer(m_shader_position, 3, ....

答案 1 :(得分:1)

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

  • 如果您不提供w,则默认为1。
  • 如果您不提供z,则默认为0。

如果你没有在屏幕上看到这一点,那就意味着它在视锥外。