我正在寫一個使用JFrame和OpenGL的jogl程序來顯示1500個旋轉立方體(由六個方塊繪製)。每個都有不同的尺寸,轉速和方向。最大幀數大約爲25.我認爲這很慢。我沒有實現燈光效果和其他東西。我的筆記本電腦是幾個月前購買i7的13英寸Macbook Air。這是我的代碼供您參考。你能否給我一些建議來改善我的計劃表現?建議不適合我的情況也受到歡迎。例如,哪種gl或flu功能會減慢我的電腦速度?我應該避免哪一個?或者,哪些可以替換?最後,我如何檢查我的程序的整體性能,以及如何知道我的程序已經優化?我應該怎麼做才能優化我的jogl性能?
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();
}
}
}
想想目實例化太:https://www.opengl.org/sdk/docs/man/html/glDrawElementsInstanced.xhtml您可以使用截錐體剔除,貢獻剔除,門戶剔除,...我主要同意選舉,但基於JOGL的更高級別解決方案可能適合您的需求,即像LibGDX,JMonkeyEngine,JogAmp的Ardor3D Continuation(我維護它) ,... – gouessej
請提供SSCCE:http://sscce.org它將幫助我們確定要優化的內容。即使您的目標是低端硬件,也不要使用即時渲染,效率不高。 – gouessej