Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package entities;
- import java.nio.FloatBuffer;
- import java.nio.IntBuffer;
- import org.lwjgl.BufferUtils;
- import org.lwjgl.opengl.GL11;
- import org.lwjgl.opengl.GL15;
- import org.lwjgl.opengl.GL20;
- import org.lwjgl.opengl.GL30;
- import org.lwjgl.util.vector.Vector3f;
- import org.lwjgl.util.vector.Vector4f;
- import base.Matrices;
- import model.Model;
- import model.OBJLoader;
- import model.ShaderHandler;
- public class Cube {
- Model cube = new Model();
- int vaoId, vertexVboId, indexVboId;
- int vsId, fsId, pId;
- public Cube(){
- cube = OBJLoader.loadObj("res/cube.obj");
- }
- public void setup(){
- int size = cube.vertices.size();
- FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(size * 3);
- for(int i = 0; i < size; i++){
- vertexBuffer.put(cube.vertices.get(i).x);
- vertexBuffer.put(cube.vertices.get(i).y);
- vertexBuffer.put(cube.vertices.get(i).z);
- }
- vertexBuffer.flip();
- size = cube.indices.size();
- IntBuffer indexBuffer = BufferUtils.createIntBuffer(size * 3);
- for(int i = 0; i < size; i++){
- indexBuffer.put((int)cube.indices.get(i).x);
- indexBuffer.put((int)cube.indices.get(i).y);
- indexBuffer.put((int)cube.indices.get(i).z);
- }
- indexBuffer.flip();
- vaoId = GL30.glGenVertexArrays();
- GL30.glBindVertexArray(vaoId);
- vertexVboId = GL15.glGenBuffers();
- GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertexVboId);
- GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexBuffer, GL15.GL_STATIC_DRAW);
- GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);
- GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
- GL30.glBindVertexArray(0);
- indexVboId = GL15.glGenBuffers();
- GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indexVboId);
- GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indexBuffer, GL15.GL_STATIC_DRAW);
- GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
- }
- public void setupShaders(){
- vsId = ShaderHandler.loadShader("res/cube_vs.glsl", GL20.GL_VERTEX_SHADER);
- fsId = ShaderHandler.loadShader("res/cube_fs.glsl", GL20.GL_FRAGMENT_SHADER);
- pId = GL20.glCreateProgram();
- GL20.glAttachShader(pId, vsId);
- GL20.glAttachShader(pId, fsId);
- GL20.glLinkProgram(pId);
- //GL20.glBindAttribLocation(pId, 0, "position");
- Matrices.perspectiveMatrixLocation = GL20.glGetUniformLocation(pId, "perspectiveMatrix");
- Matrices.viewMatrixLocation = GL20.glGetUniformLocation(pId, "viewMatrix");
- Matrices.modelMatrixLocation = GL20.glGetUniformLocation(pId, "modelMatrix");
- GL20.glValidateProgram(pId);
- }
- public void render(){
- Matrices.uploadMatrices(pId, Matrices.perspectiveMatrixLocation, Matrices.viewMatrixLocation, Matrices.modelMatrixLocation);
- GL20.glUseProgram(pId);
- GL30.glBindVertexArray(vaoId);
- GL20.glEnableVertexAttribArray(0);
- GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indexVboId);
- GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
- GL11.glDrawElements(GL11.GL_TRIANGLES, cube.indices.size() * 3, GL11.GL_UNSIGNED_INT, 0);
- GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
- GL20.glDisableVertexAttribArray(0);
- GL30.glBindVertexArray(0);
- GL20.glUseProgram(0);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement