使用JOGL使用相同纹理绘制大量不同对象的最佳方法是什么?

时间:2015-03-05 13:11:41

标签: opengl glsl jogl

以下问题与编码风格有关。 (目前使用JOGL + gl3)

如果我想用JOGL绘制包含相同纹理的大量不同对象,并减少资源使用,最好分离对象及其纹理(意味着创建另一个名为纹理的类),或者制作这些对象中的纹理是静态的吗?

另一个问题是,如果我想绘制具有不同形状的很多分支(比如说一百个),我应该编写一个名为Branch的类,然后创建一个分支实例并在每个分支实例中调用drawMyself()方法?或者创建一个包含一百个VAO的实例,每个实例包含一个分支的顶点信息并调用drawMyself()方法一次?哪一个更好还是有其他选择?

1 个答案:

答案 0 :(得分:2)

对于第一个问题,您只需要一个纹理数据实例。将其上载到VRAM后,可以从应用程序的内存中释放它以节省空间。从OpenGL角度来看,您可以在开始绘制之前简单地绑定纹理一次,然后绘制使用相同纹理的每个对象。这实际上是将绘制调用一起批处理的一种方法,这是一种提高渲染性能的常用技术。

对于第二个问题,你应该减少方法调用和减少VAO。虽然Hotspot JVM非常擅长JIT代码,但每次方法调用仍会产生一些开销,更不用说OpenGL调用的开销了。最好的情况是,如果您事先了解顶点并且它们不会在每帧的基础上更改,则使用交错的顶点属性构建单个静态VBO,然后调用绘制一次以获得最佳性能。