Hello, I’ve made a basic corridor using immediate OpenGL drawing and I want to transfer it to VBOs. However, it just doesn’t work. The immediate drawing works fine, yet I tried to make it using VBOs and it doesn’t work. Here is what I am trying to create:
And here is the code that I used for that:
GL11.glColor3f(1F, 0F, 0F);
GL11.glVertex3f(0.5F, 1.5F, 1.0F);
GL11.glColor3f(0F, 1F, 0F);
GL11.glVertex3f(0.5F, 1.5F, -15.0F);
GL11.glColor3f(0F, 0F, 1F);
GL11.glVertex3f(0.5F, -1.5F, -15.0F);
GL11.glColor3f(0.5F, 0.5F, 0.5F);
GL11.glVertex3f(0.5F, -1.5F, 1.0F);
Yet when I try to use VBOs for the same thing, it doesn’t work and I just get a black window. Here is my class to create is using VBOs.
import java.nio.FloatBuffer;
import org.lwjgl.*;
import org.lwjgl.opengl.*;
import org.lwjgl.util.glu.GLU;
import static org.lwjgl.opengl.ARBBufferObject.*;
import static org.lwjgl.opengl.ARBVertexBufferObject.*;
import static org.lwjgl.opengl.GL11.*;
public class VBO {
static int w = 640;
static int h = 480;
public static void main(String[] args) {
try {
initWindow();
renderLoop();
} catch (LWJGLException e) {
e.printStackTrace();
}
}
static void initWindow() throws LWJGLException {
Display.setDisplayMode(new DisplayMode(w, h));
Display.setFullscreen(false);
Display.create();
glViewport(0, 0, w, h);
}
static void renderLoop() {
while (!Display.isCloseRequested()) {
preRender();
render();
Display.update();
Display.sync(20);
}
Display.destroy();
}
static void preRender() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
| GL_STENCIL_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
static void render() {
glClearColor(1, 1, 1, 1);
glLoadIdentity();
glBegin(7);
drawVertexArray();
}
static void drawVertexArray() {
FloatBuffer cBuffer = BufferUtils.createFloatBuffer(12);
cBuffer.put(1).put(0).put(0);
cBuffer.put(0).put(1).put(0);
cBuffer.put(0).put(0).put(1);
cBuffer.put(0.5F).put(0.5F).put(0.5F);
cBuffer.flip();
FloatBuffer vBuffer = BufferUtils.createFloatBuffer(12);
vBuffer.put(0.5F).put(1.5f).put(1.0f);
vBuffer.put(0.5f).put(1.5f).put(-15.0f);
vBuffer.put(0.5f).put(-1.5f).put(-15.0f);
vBuffer.put(0.5f).put(-1.5f).put(1.0f);
vBuffer.flip();
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(4, /* stride */4 << 2, cBuffer);
glVertexPointer(4, /* stride */4 << 2, vBuffer);
glDrawArrays(GL_QUADS, 0, /* elements */4);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
}
}