3

背景:我正在开发一个应用程序,它基本上绘制了一个巨大的节点和边的 3D 图。节点被绘制为实例立方体,而边缘则使用几何着色器绘制GL_LINE并扩展为由三角形条带组成的 3D 体积“线”。目前,每次重绘边缘时,我都会执行此扩展。但是,由于我的图形是完全静态的(节点不能移动,因此边也不能移动),我认为我只需要将GL_LINE定义扩展为三角形条带一次,将扩展的顶点捕获到缓冲区中(使用转换反馈),并且然后从那一点开始,使用那些捕获的顶点和glMutliDrawArrays原始类型的GL_TRIANGLE_STRIP.

问题:我正在绘制的所有这些体积线都包含 10 个顶点。但是,glMultiDrawArrays需要一组起始索引和计数大小,它们基本上描述了每个基元的起始点和计数(以元素为单位)。由于我的原语的大小都没有变化,我会制作一个看似不必要的起始索引和计数列表。OpenGL是否提供了任何功能,可以让我简单地指定一个步幅(以元素为单位),在该步幅处会发生原始重启?

4

1 回答 1

3

没有这样的功能,但根据您的需要,您不需要一个。变换反馈不能输出三角带。它仅输出基本图元:单个点、线或三角形。这就是为什么glBeginTransformFeedback只需要GL_POINTS,GL_LINESGL_TRIANGLES.

您所要做的就是一次渲染所有边缘,通过反馈将结果收集到一个缓冲区中,然后通过一次调用来渲染整个事物glDrawArrays

于 2013-03-19T23:00:00.610 回答