2010-01-17 5 views
2

J'ai essayé d'implémenter Open GLs Vertex Buffer Objects la première fois, et tout ce que j'obtiens est un écran noir.Java OpenGL Vertex Buffer Les objets ne fonctionnaient pas

Je l'ai essayé avec glOrtho au lieu de glPerspective, mais cela n'a pas fonctionné aussi bien.

merci pour aider

Heres mon code:

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); 
    } 
} 

Répondre

1

Vous avez profondeur des tests a permis, mais vous ne désactivez pas le z-tampon une fois par trame à l'aide glClear (au début de votre Méthode render). Idem pour effacer le tampon de couleur.

EDIT: Aussi, initGl() semble ne jamais être appelé?

+0

ce genre de confusion pourquoi je n'appelle jamais initGL() ... glClear m'a aidé. Merci – Simiil

Questions connexes