如何渲染多种绘制模式?

How can I render multiple draw modes?

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

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

下面是问题所在。切换到新的绘制模式后,我的 GL_TRIANGLE 分变成了 GL_TRIANGLE_STRIP 分。

你需要画两次。第一个带有 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);

你总是可以将这个问题抽象为你的形状集。

如果您正在绘制的每个形状都是单个对象,您可以轻松地做到这一点。你可以创建一个形状 class 来存储一组点并设置你的 VBO,然后这个 class 可以包含一个 render() 方法。

你的形状 class 可以存储一个 GLenum drawMode 然后它是该形状的绘制模式的句柄。然后,无需编写所有绘图代码并将其复制到 glRenderLoop() 中,您可以将其编写在 render() 方法中,只需在 glRenderLoop().[=16 中调用形状的渲染方法=]

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