Qt 如何渲染多个绘制模式?

Qt 如何渲染多个绘制模式?,qt,opengl,Qt,Opengl,我创建了一个程序,用于切换绘制模式GL_三角形、GL_点、GL_线_循环等。我使用glDrawArarys渲染这些绘制模式,但每次切换到新的绘制模式时,它都会将以前在绘制模式中创建的所有点设置为新的绘制模式 我想断开这些点的连接,以便在同一渲染中具有两种不同绘制模式的形状。我该怎么做 下面是问题所在。切换到新的绘图模式后,我的GL_三角形点成为GL_三角形条带点 你需要画两次。第一个具有GL_三角形基本体,第二个具有GL_三角形基本体。大概是这样的: glDrawArrays(GL_TRIANG

我创建了一个程序,用于切换绘制模式GL_三角形、GL_点、GL_线_循环等。我使用glDrawArarys渲染这些绘制模式,但每次切换到新的绘制模式时,它都会将以前在绘制模式中创建的所有点设置为新的绘制模式

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

下面是问题所在。切换到新的绘图模式后,我的GL_三角形点成为GL_三角形条带点


你需要画两次。第一个具有GL_三角形基本体,第二个具有GL_三角形基本体。大概是这样的:

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);

您始终可以将此问题抽象为一组形状

如果您正在绘制的每个形状都是单个对象,则可以轻松地执行此操作。可以创建一个形状类,该类存储一组点并设置VBO,然后该类可以包含渲染方法

shape类可以存储GLenum drawMode,它是该形状的绘图模式的句柄。然后,您可以在render方法中编写它,并在glRenderLoop中调用形状的render方法,而不是编写所有绘制代码并在glRenderLoop中复制它


然后,渲染方法将根据创建形状的方式使用适用的绘制模式

您可能想发布渲染代码的一小段,以便我们可以看到您当前正在做什么,以帮助确定需要更改的内容。这在短期内是可行的,但当我想返回绘制GL_三角形时会发生什么?我是否需要保留一个单独的int数组,其中包含每个绘图模式开始位置的索引?@tim:OpenGL不是场景图。你让它画一些东西,一些东西被画了,就这样。OpenGL不保留场景。无论你想看什么,你都必须一字不差地告诉它OpenGL。没有添加到场景或更新这样的事情。你总是从一开始就画出整个画面。@datenwolf:所以没有一个绘图函数可以只更新场景或分离点,而不必指定绘图模式的结束位置?@tim:如果没有看到你迄今为止尝试过的代码,真的很难判断。