我创建了一个切换绘制模式的程序(GL_TRIANGLES,GL_POINTS,GL_LINE_LOOP等)。我使用glDrawArarys()渲染这些绘制模式,但每次切换到新的绘制模式时,它会将我在先前绘制模式中创建的所有先前点设置为新的绘制模式。
我想断开这些点,这样我就可以在同一个渲染中拥有2种不同绘制模式的形状。我怎么能这样做?
以下是问题所在。切换到新的绘制模式后,我的GL_TRIANGLE点变为GL_TRIANGLE_STRIP点。
答案 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()
方法将根据您创建形状的方式使用适用的绘制模式。