使用透视矩阵使用OpenGL渲染2D数据时的工件

时间:2015-12-06 04:23:34

标签: opengl

下面的线,延伸无限远距离是神器。期望的是连接两个椭圆的线:

enter image description here

我已经检查了手动加载到VBO中的数据,用于表示线的点位于中间椭圆的中心和底部椭圆的中心。绘图的代码看起来像。

m_shaderManager->useProgram(m_handle);
glBindBuffer(GL_ARRAY_BUFFER, m_vbo); GL_CALL
m_shaderManager->enableVertexAttribArrays(m_handle, m_shaderVertexAttrib);
m_shaderManager->setUniformMatrix4X4(m_handle, m_mvp.to_gl_matrix(), "uMVP");
glDrawArrays(GL_LINE_STRIP, 0, m_vertexAttrib.get_attribute_count()); GL_CALL
  1. 对get_attribute_count()的调用按预期返回2.
  2. m_mvp是单位矩阵。
  3. 我的问题不在于代码中的问题在哪里。有很多代码需要筛选。相反,我的问题是调试应该从哪里开始?我之前用这段代码绘制了简单的行,并检查了原始数据。还有哪些其他类型的事情会导致这种行为?

    根据要求,这是我在调试时看到的一个地方: enter image description here enter image description here

1 个答案:

答案 0 :(得分:1)

你告诉你m_mvp是身份,所以我猜顶点着色器中的输入与输出相同(至少是顶点位置)。如果您在着色器中放置的两个点是可见的两个向量:[0 0 0][3.5e-8, -3, 0],那么难怪您的输出看起来就像现在这样。 [0 0 0]是屏幕的中心,线条开始,[3.5e-8, -3, 0]在y方向(在可见区域下)的屏幕之外-2。屏幕上的所有可见顶点都在每个维度[-1 | 1]范围内(标准化设备坐标)。