Incorrect VBOs

I’m slowly learning VBOs and GLSL shaders, and I’m trying to get the basics down until I get into things like uniform matrices, and non-depreciated VBOs. But I have this as my ‘block’ code. Its ran during the game loop, and called correctly in the main class.

package passage.games;

import java.nio.FloatBuffer;

import org.lwjgl.BufferUtils;
import org.lwjgl.util.vector.Vector3f;

import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL15.*;

public class Block {
	public Vector3f location;
	public Vector3f rotation;
	
	private int vertexPointer;
	private int colorPointer;
	
	private FloatBuffer vertexBuffer;
	private FloatBuffer colorBuffer;
	
	private Shader boxShader;
		
	private float[] vertexData = {
	    -1.0f,-1.0f,-1.0f,
	    -1.0f,-1.0f, 1.0f,
	    -1.0f, 1.0f, 1.0f,
	    
	    1.0f, 1.0f,-1.0f,
	    -1.0f,-1.0f,-1.0f,
	    -1.0f, 1.0f,-1.0f,
	    
	    1.0f,-1.0f, 1.0f,
	    -1.0f,-1.0f,-1.0f,
	    1.0f,-1.0f,-1.0f,
	    
	    1.0f, 1.0f,-1.0f,
	    1.0f,-1.0f,-1.0f,
	    -1.0f,-1.0f,-1.0f,
	    
	    -1.0f,-1.0f,-1.0f,
	    -1.0f, 1.0f, 1.0f,
	    -1.0f, 1.0f,-1.0f,
	    
	    1.0f,-1.0f, 1.0f,
	    -1.0f,-1.0f, 1.0f,
	    -1.0f,-1.0f,-1.0f,
	    
	    -1.0f, 1.0f, 1.0f,
	    -1.0f,-1.0f, 1.0f,
	    1.0f,-1.0f, 1.0f,
	    
	    1.0f, 1.0f, 1.0f,
	    1.0f,-1.0f,-1.0f,
	    1.0f, 1.0f,-1.0f,
	    
	    1.0f,-1.0f,-1.0f,
	    1.0f, 1.0f, 1.0f,
	    1.0f,-1.0f, 1.0f,
	    
	    1.0f, 1.0f, 1.0f,
	    1.0f, 1.0f,-1.0f,
	    -1.0f, 1.0f,-1.0f,
	    
	    1.0f, 1.0f, 1.0f,
	    -1.0f, 1.0f,-1.0f,
	    -1.0f, 1.0f, 1.0f,
	    
	    1.0f, 1.0f, 1.0f,
	    -1.0f, 1.0f, 1.0f,
	    1.0f,-1.0f, 1.0f
	};
	
	public float[] colorData = {
		0.583f,  0.771f,  0.014f,
	    0.609f,  0.115f,  0.436f,
	    0.327f,  0.483f,  0.844f,
	    
	    0.822f,  0.569f,  0.201f,
	    0.435f,  0.602f,  0.223f,
	    0.310f,  0.747f,  0.185f,
	    
	    0.597f,  0.770f,  0.761f,
	    0.559f,  0.436f,  0.730f,
	    0.359f,  0.583f,  0.152f,
	    
	    0.483f,  0.596f,  0.789f,
	    0.559f,  0.861f,  0.639f,
	    0.195f,  0.548f,  0.859f,
	    
	    0.014f,  0.184f,  0.576f,
	    0.771f,  0.328f,  0.970f,
	    0.406f,  0.615f,  0.116f,
	    
	    0.676f,  0.977f,  0.133f,
	    0.971f,  0.572f,  0.833f,
	    0.140f,  0.616f,  0.489f,
	    
	    0.997f,  0.513f,  0.064f,
	    0.945f,  0.719f,  0.592f,
	    0.543f,  0.021f,  0.978f,
	    
	    0.279f,  0.317f,  0.505f,
	    0.167f,  0.620f,  0.077f,
	    0.347f,  0.857f,  0.137f,
	    
	    0.055f,  0.953f,  0.042f,
	    0.714f,  0.505f,  0.345f,
	    0.783f,  0.290f,  0.734f,
	    
	    0.722f,  0.645f,  0.174f,
	    0.302f,  0.455f,  0.848f,
	    0.225f,  0.587f,  0.040f,
	    
	    0.517f,  0.713f,  0.338f,
	    0.053f,  0.959f,  0.120f,
	    0.393f,  0.621f,  0.362f,
	    
	    0.673f,  0.211f,  0.457f,
	    0.820f,  0.883f,  0.371f,
	    0.982f,  0.099f,  0.879f,
	};
	
	public Block(Vector3f location, Vector3f rotation){
		this.location = location;
		this.rotation = rotation;
	}
	
	public Block(Vector3f location){
		this.location = location;
		this.rotation = new Vector3f(0, 0, 0);
	}
	
	public Block(){
		this.location = new Vector3f(0, 0, 0);
		this.rotation = new Vector3f(0, 0, 0);
	}
	
	public void init(){
		vertexBuffer = BufferUtils.createFloatBuffer(108);
		vertexBuffer.put(vertexData);
		vertexBuffer.flip();
		
		colorBuffer = BufferUtils.createFloatBuffer(108);
		colorBuffer.put(colorData);
		colorBuffer.flip();
		
		vertexPointer = glGenBuffers();
		glBindBuffer(GL_ARRAY_BUFFER, vertexPointer);
		glBufferData(GL_ARRAY_BUFFER, vertexBuffer, GL_STATIC_DRAW);
		glBindBuffer(GL_ARRAY_BUFFER, 0);

		colorPointer = glGenBuffers();
		glBindBuffer(GL_ARRAY_BUFFER, colorPointer);
		glBufferData(GL_ARRAY_BUFFER, colorBuffer, GL_STATIC_DRAW);
		glBindBuffer(GL_ARRAY_BUFFER, 0);
		
		boxShader = new Shader();
		boxShader.attachVertexShader("./assets/box.vert");
		boxShader.attachFragmentShader("./assets/box.frag");
		boxShader.link();
	}
	
	public void render(){
		boxShader.bind();
			glEnableClientState(GL_VERTEX_ARRAY);
			glEnableClientState(GL_COLOR_ARRAY);
			
			glBindBuffer(GL_ARRAY_BUFFER, vertexPointer);
			glVertexPointer(3, GL_FLOAT, 0, 0);
			
			glBindBuffer(GL_ARRAY_BUFFER, colorPointer);
			glColorPointer(3, GL_FLOAT, 0, 0);
			
			glDrawArrays(GL_TRIANGLES, 0, 12);
			
			glDisableClientState(GL_VERTEX_ARRAY);
			glDisableClientState(GL_COLOR_ARRAY);
		boxShader.unbind();
	}
	
	public void update(){
		
	}
	
	public void destroy(){
		glDeleteBuffers(vertexPointer);
		glDeleteBuffers(colorPointer);
	}
}

I haven’t used uniform matrices yet, or layouts and in/out. I’ve got the basics of the the built-in matrices

Fragment shader:

void main(){
	gl_FragColor = gl_Color;
}

Vertex shader:

void main(){
    gl_FrontColor = gl_Color;
	gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}

Result:

Have you verified that those triangles aren’t being subjected to face culling? I would try switching the order of some of those triangles vertices.

No, there isn’t face culling enabled. (I don’t think its enabled by default…)

Here is the culprit I believe:

glDrawArrays(GL_TRIANGLES, 0, 12);

This says that you are going to draw 12 indices, not 12 triangles. It should be

glDrawArrays(GL_TRIANGLES, 0, 12 * 3);

Edit: Actually, you don’t even supply enough vertices to draw an entire cube with glDrawArrays(). You are going to have to have 36 vertices to draw a full cube.

Thank you so much! It worked.