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);
}
}
ce genre de confusion pourquoi je n'appelle jamais initGL() ... glClear m'a aidé. Merci – Simiil