我剛開始使用JOGL後如預期,有件事情我一直沒能做到:有基本的繪畫和旋轉的NeHe tutorials一個例子,和一切工作只是很好,除了在第一個三角形之後和下一個四邊形之前使用的glLoadIdentity();
。該JOGL代碼是下一個:不能使用glLoadIdentity在JOGL
float rtri = 0.0f;
float rquad = 0.0f;
@Override
public void display(GLAutoDrawable drawable) {
final GL2 gl = drawable.getGL().getGL2();
gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(-1.5f,0.0f,-6.0f);
gl.glRotatef(rtri, 0.0f, 1.0f, 0.0f);
gl.glBegin(GL2.GL_TRIANGLES);
{
gl.glColor3f(1.0f,0.0f,0.0f);
gl.glVertex3f(0.0f, 1.0f, 0.0f);
gl.glColor3f(0.0f,1.0f,0.0f);
gl.glVertex3f(-1.0f,-1.0f, 0.0f);
gl.glColor3f(0.0f,0.0f,1.0f);
gl.glVertex3f(1.0f,-1.0f, 0.0f);
}
gl.glEnd();
// Here seems to be the problem
gl.glLoadIdentity();
gl.glTranslatef(3.0f, 0.0f, 0.0f);
gl.glRotatef(rquad, 1.0f, 0.0f, 0.0f);
gl.glBegin(GL2.GL_QUADS);
{
gl.glColor3f(0.5f, 0.5f, 1.0f);
gl.glVertex3f(-1.0f, 1.0f, 0.0f);
gl.glVertex3f(1.0f, 1.0f, 0.0f);
gl.glVertex3f(1.0f,-1.0f, 0.0f);
gl.glVertex3f(-1.0f,-1.0f, 0.0f);
}
gl.glEnd();
gl.glFlush();
rtri += 0.15f;
rquad -= 0.5f;
}
正如你可以看到,有一個gl.glLoadIdentity();
定義的四前。如果這條線被評論,最終的程序會渲染第一個三角形旋轉,而四邊形則圍繞三角形旋轉,但四邊形也會自行旋轉。
如果該行沒有被註釋掉,四不是在所有的渲染,只有三角形渲染,用它定義的顏色和旋轉。
到目前爲止我看到的所有例子似乎都使用gl.glLoadIdentity();
來恢復當前矩陣模式(GL_MODELVIEW)的默認狀態,但在這種情況下,其他事情似乎正在發生。
我已經gl.glPushMatrix();
和gl.glPopMatrix();
測試每個繪圖操作前,周圍所有的繪圖代碼,有和沒有中間的gl.glLoadIdentity();
,但似乎沒有任何幫助。
我檢查了其他的例子init和重塑方法,但一切似乎只是罰款:
@Override
public void init(GLAutoDrawable drawable) {
final GL2 gl = drawable.getGL().getGL2();
gl.glShadeModel(GL2.GL_SMOOTH);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
gl.glClearDepth(1.0f);
gl.glEnable(GL2.GL_DEPTH_TEST);
gl.glDepthFunc(GL2.GL_LEQUAL);
gl.glHint(GL2ES1.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST);
}
@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
final GL2 gl = drawable.getGL().getGL2();
if (height <= 0) {
height = 1;
}
float h = (float) width/(float) height;
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(50.0f, h, 1.0, 1000.0);
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
}
我想繼續學習的OpenGL,而使用Java(我喜歡的Java和很久以前,我不使用C++),但我應該是OpenGL的基礎知識,我不想繼續失去這樣的「基本」東西。謝謝大家的幫助,如果我的英文有錯,對不起。
什麼英雄!非常感謝你!。這正是我需要的。 –