Java OpenGL渲染许多三角形

Jef*_*rey 2 java opengl jogl

我有一个openGL(实际上是JOGL,但这里适用相同的概念)app,我有一个场景,在每个渲染过程中呈现大约10k个三角形.必须在每次渲染时计算三角形的比例和角度,因为三角形需要保持相对于摄像机位置的恒定大小和旋转.

我尝试使用显示列表,然后在每次调用之前进行缩放/旋转glCallList.这是有效的,但它使系统爬行.我正在研究使用顶点缓冲区,但我不确定这是否适合这样做,因为我需要在每次渲染时旋转/缩放.

有人可以帮助我指出在每个场景中渲染这么多三角形的正确方向吗?

编辑 - 这为问题提供了一些额外的背景.

该应用程序是一个地图应用程序,显示了世界的三维视图.需要在指向相对于罗盘的方向的表面上绘制某些形状,即30度.用户可以旋转三维视图,但形状必须保持平坦在地球表面上,并指向指定的方向.

谢谢,杰夫

Ned*_*ham 5

具有GL_DYNAMIC_DRAW的顶点缓冲区和具有GL_STATIC_DRAW的Indice缓冲区将是您在简单性方面可以做的最好的.

如果可以访问着色器(GLSL或HSL),请使用带有GL_STATIC_DRAW的顶点缓冲区和带有GL_STATIC_DRAW的Indice缓冲区,并计算顶点着色器中的比例和旋转.这样你可以将一些工作转储到GPU上.(如果工作开始时CPU很重)

也许在手前做一些截头剔除?遮挡剔除?加速应用程序的最佳方法是减少渲染的三角形数量.

甚至可能使用一些线程.一个要渲染的线程,另一个用于计算比例和角度.

  • 剔除将有助于填充率问题或顶点/片段处理能力问题.10k三角形是一个很小的数量,所以这看起来像一个CPU问题 - 所以Vertex缓冲区是要走的路,减少绘制调用的数量(每帧一个DrawArrays或DrawElements).并且避免将线程拆分并渲染到不同的线程中,这不是一种好的思考方式(渲染调用并不昂贵!).如果需要,您可以并行化计算本身. (2认同)