방금 JOGL로 시작 했으므로 수행 할 수없는 작업이 있습니다. 기본 도면과 회전의 예가 NeHe tutorials이고 모든 것이 작동합니다 첫 번째 삼각형 이후와 다음 쿼드 이전에 사용 된 glLoadIdentity();
을 제외하고는 괜찮습니다. JOGL 코드는 다음입니다 : 당신이 볼 수 있듯이 쿼드가 정의되기 전에JOGL에서 번역 후 예상대로 glLoadIdentity를 사용할 수 없습니다
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.glLoadIdentity();
의 존재 여부에 관계없이 각 드로잉 작업을 수행하기 전에 gl.glPushMatrix();
및 gl.glPopMatrix();
으로 테스트했지만 아무 것도 도움이되지 않습니다.
나는 다른 예 '초기화 및 바꿀 방법을 확인했지만, 모든 것이 잘 보인다
@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을 학습 유지하고 싶은 자바를 사용하는 동안 (내가 자바를 사랑하고 싶지만 오래전에 저는 C++을 사용하지 않았습니다), OpenGL의 기본에 있어야하고, 그런 "기본적인"것을 놓치고 싶지 않습니다. 도와 줘서 고마워, 내 영어에 오류가 생겨서 미안해.
무슨 영웅!, 대단히 감사합니다 !! !! 그것이 내가 필요한 것입니다. –