2014-09-11 3 views
0

디스플레이 목록을 사용하여 삼각형을 렌더링하고 렌더링 할 때 아무 것도 나타나지 않습니다. 아무도 그 이유를 말할 수 있습니까?glCallList는 JOGL에서 코딩 효과가 없습니다

display() 메서드 내에서 renderTriangle (gl, 100)을 호출합니다. 예상대로 작동하지만 200 픽셀 너비의 삼각형이 화면에 나타납니다. 하지만 gl.glCallList (list); 전화가 아무런 효과가없는 것 같습니다. 전혀 화면에 아무 것도 나타나지 않습니다.

JOGL에 익숙하지 않은 사용자를 위해 여기에 메소드 호출 순서가 있습니다. 초기화, 디스플레이, 디스플레이, 디스플레이 ...

내 buildDisplayList 메소드는 괜찮습니까? glCallList에 대한 호출이 맞습니까? 나는 그것이 작동하도록하기위한 추가 설정이 필요합니까?

public class TriDemo extends GLJPanel implements GLEventListener { 

private int list; 

public TriDemo(GLCapabilities glCapabilities, int width, int height) { 
    super(glCapabilities); 
    this.setPreferredSize(new Dimension(width, height)); 
    this.addGLEventListener(this); 
} 

private void renderTriangle(GL2 gl, float size) { 
    gl.glBegin(GL_TRIANGLES); 
     gl.glVertex3f(-1*size, -1*size, 0); 
     gl.glVertex3f(1*size, -1*size, 0); 
     gl.glVertex3f(0*size, 1*size, 0); 
    gl.glEnd(); 
} 

private void buildDisplayList(GL2 gl) { 
    list = gl.glGenLists(1); 
    gl.glNewList(list, GL_COMPILE); 
     renderTriangle(gl, 100); 
    gl.glEndList(); 
} 

@Override 
public void init(GLAutoDrawable drawable) { 
    GL2 gl = drawable.getGL().getGL2(); 
    gl.glClearColor(0, 0, 0.2f, 1); 

    buildDisplayList(gl); 
} 

@Override 
public void dispose(GLAutoDrawable drawable) { } 

@Override 
public void display(GLAutoDrawable drawable) { 
    GL2 gl = drawable.getGL().getGL2(); 

    gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    gl.glColor3f(0, 1, 0); 
    //renderTriangle(gl, 100); 
    gl.glCallList(list); 
} 

@Override 
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { 
    GL2 gl = drawable.getGL().getGL2(); 
    GLU glu = GLU.createGLU(gl); 

    gl.glMatrixMode(GL_PROJECTION); 
    gl.glLoadIdentity(); 
    glu.gluOrtho2D(-width/2, width/2, -height/2, height/2); 
    gl.glMatrixMode(GL_MODELVIEW); 
    gl.glLoadIdentity(); 
    gl.glViewport(0, 0, width, height); 
} 

} 실행 가능한 예를 들어

다른 클래스 : 뷰포트가 준비되기 전에

public class AppWindow extends JFrame { 

public AppWindow() { 
    super("Tri Test); 
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 

    GLProfile glProfile = GLProfile.getDefault(); 
    GLCapabilities glCapabilities = new GLCapabilities(glProfile); 
    GLJPanel panel = new TriDemo(glCapabilities, 800, 600); 
    FPSAnimator animator = new FPSAnimator(panel, 60); 
    animator.start(); 
    this.getContentPane().add(panel); 
    this.pack(); 
    this.setVisible(true); 
} 

public static void main(String[] args) { 
    new AppWindow(); 
} 
+0

첫 번째 사항 먼저; 오류를 검사하기 위해'glGetError'를 호출 했습니까? –

+0

예. glGetError에 대한 호출을 표시 목록 부분을 다루는 어떤 측면에도 넣습니다. 항상 0을 반환했습니다. – LucidObscurity

+0

"목록"의 가치는 무엇입니까? 0입니까? 코드에 버그가 있거나 드라이버가 깨져서 표시 목록이있는 JOGL에 문제가 없으며 단지 원시 OpenGL 메서드를 호출합니다. Jogl-demos의 예제를 살펴보면 성공하지 못했지만 디스플레이 목록을 사용하는 예제가 적어도 하나는 있다고 확신합니다. 어쨌든 오래된 시스템의 일부 코드에서도 표시 목록을 사용하지 않아야합니다. 깨진 구현이 많고 대부분의 최신 드라이버는 표시 목록의 정적 VBO를 사용하기 때문입니다. – gouessej

답변

0

귀하의 buildDisplayList() 함수가 호출된다. 이것이 아무것도 렌더링되지 않는 이유입니다. buildDisplayList()display() 함수, 즉 뷰포트 및 GL 초기화 후에 호출해야합니다.

관련 문제