如何渲染多种绘制模式?

时间:2015-02-24 21:52:08

标签: qt opengl

我创建了一个切换绘制模式的程序(GL_TRIANGLES,GL_POINTS,GL_LINE_LOOP等)。我使用glDrawArarys()渲染这些绘制模式,但每次切换到新的绘制模式时,它会将我在先前绘制模式中创建的所有先前点设置为新的绘制模式。

我想断开这些点,这样我就可以在同一个渲染中拥有2种不同绘制模式的形状。我怎么能这样做?

以下是问题所在。切换到新的绘制模式后,我的GL_TRIANGLE点变为GL_TRIANGLE_STRIP点。

This is the problem

2 个答案:

答案 0 :(得分:0)

你需要画两次。第一个具有GL_TRIANGLES原语,第二个具有GL_TRIANGLE_STRIP原语。像这样:

glDrawArrays(GL_TRIANGLES, first, count);

// do any atualization in Uniforms, if necessary to update transformations
// and do it again
glDrawArrays(GL_TRIANGLE_STRIP, first, count);

答案 1 :(得分:0)

您始终可以将此问题抽象为您的形状集。

如果您绘制的每个形状都是单个对象,则可以轻松完成此操作。您可以创建一个存储一组点并设置VBO的形状类,然后该类可以包含render()方法。

你的形状类可以存储GLenum drawMode,然后它就是该形状的绘制模式的句柄。然后,不是编写所有绘制代码​​并将其复制到glRenderLoop()中,而是可以在render()方法中编写它,只需在glRenderLoop()中调用形​​状的渲染方法。

render()方法将根据您创建形状的方式使用适用的绘制模式。