我有一个 openGL(实际上是 JOGL,但同样的概念也适用于此)应用程序,其中我有一个场景,在每个渲染 channel 上渲染大约 10k 三角形。由于三角形需要保持恒定的大小和相对于相机位置的旋转,因此必须在每次渲染时计算三角形的比例和角度。
我尝试过使用显示列表,然后在每次调用 glCallList
之前进行缩放/旋转。这确实有效,但它会让系统变得缓慢。我已经考虑为此使用顶点缓冲区,但我不确定这是否是适当的方法,因为我需要在每次渲染时旋转/缩放。
有人可以帮我指出在每个场景中渲染这么多三角形的正确方向吗?
编辑 - 这为问题提供了一些额外的背景信息。
该应用程序是一个显示 3D 世界 View 的 map 应用程序。需要在表面上绘制某些形状,指向相对于指南针的方向,即 30 度。用户可以旋转 3D View ,但形状必须保持平坦在地球表面上,并且还指向指定的方向。
谢谢, 杰夫
最佳答案
就简单性而言,使用 GL_DYNAMIC_DRAW 的顶点缓冲区和使用 GL_STATIC_DRAW 的索引缓冲区将是最好的选择。
如果您有权访问着色器(GLSL 或 HSL),请使用带有 GL_STATIC_DRAW 的顶点缓冲区和带有 GL_STATIC_DRAW 的索引缓冲区,并计算顶点着色器中的缩放和旋转。这样你就可以将一些工作转储到 GPU 上。 (如果工作一开始就占用大量 CPU 资源)
也许事先做一些视锥体剔除?遮挡剔除?加速应用程序的最佳方法是减少渲染的三角形数量。
也许甚至可以使用一些线程。一个线程用于渲染,另一个线程用于计算比例和角度。
关于Java OpenGL渲染许多三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4306886/