2010-01-17 2 views
2

Open GLs 버텍스 버퍼 객체를 처음으로 구현하려고했는데 모두 검은 색 화면이었습니다.Java OpenGL 버텍스 버퍼 객체가 작동하지 않습니다.

glPerspective 대신 glOrtho를 사용해 보았지만 제대로 작동하지 않았습니다. Heres는 내 코드

을 돕는

감사 :

public class VBufferTest { 

public static final int WIN_WIDTH = 640; 
public static final int WIN_HEIGHT = 480; 
public int vBufferId; 

public static void main(String args[]){ 
    VBufferTest foo = new VBufferTest(); 
    foo.initLWJGLFrame(); 
    foo.initBuffer(); 
    while (!Display.isCloseRequested()){ 
    foo.render(); 
    } 
} 

public void initLWJGLFrame(){ 
    try { 
     DisplayMode[] possible = Display.getAvailableDisplayModes(); 
     DisplayMode chosen = null; 
     for (int i = 0; i < possible.length; i += 1){ 
      if (possible[i].getWidth() == WIN_WIDTH && possible[i].getHeight() == WIN_HEIGHT){ 
      chosen = possible[i];   
      break; 
      } 
     } 
     if (chosen != null){ 
      Display.setDisplayMode(chosen); 
      Display.setTitle("TestFrame1"); 
      Display.create(); 

     } 
     else { 
      throw new LWJGLException("Couldn't find the appropriate display mode."); 
     } 
     } 
     catch (LWJGLException e){ 

     } 
} 

public void initGL(){ 
    GL11.glEnable(GL11.GL_DEPTH_TEST); 
    GL11.glEnable(GL11.GL_TEXTURE_2D); 
    GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); 
    GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); 
    GL11.glClearColor(104.f/255.0f, 136.0f/255.0f, 252.0f/255.0f, 1.0f); 
    GL11.glMatrixMode(GL11.GL_PROJECTION); 
    GL11.glLoadIdentity(); 
    GLU.gluPerspective(50.0f, Display.getDisplayMode().getWidth()/Display.getDisplayMode().getHeight(), 0.5f, 1000.0f); 

    GL11.glViewport(0, 0, Display.getDisplayMode().getWidth(), Display.getDisplayMode().getHeight()); 
    GL11.glMatrixMode(GL11.GL_MODELVIEW); 
    GL11.glLoadIdentity(); 
} 
    public void initBuffer(){ 
    FloatBuffer vertices = BufferUtils.createFloatBuffer(4*3); 
    vBufferId = genNewId(); 
    vertices.put(new float[]{-1.0f, -1.0f, 0.0f}); 
    vertices.put(new float[]{1.0f, -1.0f, 0.0f}); 
    vertices.put(new float[]{1.0f, 1.0f, 0.0f}); 
    vertices.put(new float[]{-1.0f, 1.0f, 0.0f}); 
    vertices.flip(); 
    bufferData(vBufferId, vertices); 
    } 

    public void render(){ 
    GL11.glColor3f(1.0f, 0.0f, 1.0f); 
    ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, this.vBufferId); 
    GL11.glVertexPointer(3, GL11.GL_FLOAT, 0, 0); 
    GL11.glDrawArrays(GL11.GL_QUADS, 0, 4); 
    Display.update(); 
    } 

    public static int genNewId(){ 
     IntBuffer buffer = BufferUtils.createIntBuffer(1); 
     ARBVertexBufferObject.glGenBuffersARB(buffer); 
     return buffer.get(0); 
    } 


    public static void bufferData(int id, FloatBuffer buffer){ 
     ARBVertexBufferObject.glBindBufferARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, id); 
     ARBVertexBufferObject.glBufferDataARB(ARBVertexBufferObject.GL_ARRAY_BUFFER_ARB, buffer, ARBVertexBufferObject.GL_STATIC_DRAW_ARB); 
    } 
} 

답변

1

당신은 깊이 테스트가 활성화되어 있지만의 시작 부분에 (glClear를 사용하여 프레임 당 한 번 z 버퍼를 삭제하지 마십시오 render 방법). 색상 버퍼를 지우는 것과 동일합니다.

편집 : initGl()도 호출하지 않는 것 같습니다.

+0

내가 initGL()을 호출하지 않는 이유는 무엇입니까? glClear가 도움이되었습니다. 감사 – Simiil

관련 문제