【发布时间】:2016-04-23 13:42:32
【问题描述】:
我正在使用 JFrame 和 OpenGL 编写一个 jogl 程序来显示 1500 个旋转立方体(由六个正方形绘制)。每个都有不同的尺寸、旋转速度和方向。最大fps约为25。我认为它很慢。我还没有实现灯光效果和其他东西。我的笔记本电脑是几个月前购买的带有 i7 的 13 英寸 Macbook air。这是我的代码供您参考。你能给我一些建议来提高我的程序的性能吗?不适合我情况的建议也受到欢迎。例如,哪些 gl 或 flu 功能会降低我的计算机速度?我应该避免哪个?或者,哪个可以更换?最后,我如何检查程序的整体性能以及如何知道我的程序已优化?
public void draw(GLAutoDrawable drawable) { // this is a method called in the display method.
GL2 gl = drawable.getGL().getGL2();
gl.glMatrixMode(GL2.GL_MODELVIEW);
if ( Constants.p == null ) return;
for ( Primitives p : Constants.p ) { //Constants is a class that holds all the global variables
gl.glLoadIdentity();
gl.glTranslated(p.centerPoint.x,p.centerPoint.y, p.centerPoint.z);
gl.glRotated(p.angle, p.direction.x, p.direction.y, p.direction.z);p.angle += p.speed;p.angle = p.angle % 360;
if ( Constants.modes == 0 ) { //draw using lines
gl.glBegin (GL2.GL_LINES);//static field
for ( Integer[] l : p.line ) {
gl.glColor3d(p.color.get(l[0]).x,p.color.get(l[0]).y,p.color.get(l[0]).z);
gl.glVertex3d( p.vert.get(l[0]).x, p.vert.get(l[0]).y, p.vert.get(l[0]).z);
gl.glColor3d(p.color.get(l[1]).x,p.color.get(l[1]).y,p.color.get(l[1]).z);
gl.glVertex3d( p.vert.get(l[1]).x, p.vert.get(l[1]).y, p.vert.get(l[1]).z);
}
gl.glEnd();
} else if ( Constants.modes == 1 ) { //draw using squares
gl.glBegin (GL2.GL_QUADS);//static field
for ( Integer[] f : p.face ) {
for ( Integer l : f ) {
for ( Integer i : p.line.get(l) ) {
gl.glColor3d(p.color.get(i).x,p.color.get(i).y,p.color.get(i).z);
gl.glVertex3d( p.vert.get(i).x, p.vert.get(i).y, p.vert.get(i).z);
}
}
}
gl.glEnd();
}
}
}
【问题讨论】:
-
也考虑网格实例化:opengl.org/sdk/docs/man/html/glDrawElementsInstanced.xhtml 您可以使用平截头体剔除、贡献剔除、门户剔除……我大多同意选择但基于 JOGL 的更高级别的解决方案可能适合您的需求,即框架或引擎,如 LibGDX、JMonkeyEngine、JogAmp 的 Ardor3D Continuation(我维护它),...
-
请提供 SSCCE:sscce.org 这将帮助我们确定要优化的内容。即使针对低端硬件,也不要使用立即渲染,它效率低下。
标签: algorithm performance jogl