Guest User

Cube.java

a guest
Apr 12th, 2013
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.15 KB | None | 0 0
  1. package entities;
  2.  
  3. import java.nio.FloatBuffer;
  4. import java.nio.IntBuffer;
  5.  
  6. import org.lwjgl.BufferUtils;
  7. import org.lwjgl.opengl.GL11;
  8. import org.lwjgl.opengl.GL15;
  9. import org.lwjgl.opengl.GL20;
  10. import org.lwjgl.opengl.GL30;
  11. import org.lwjgl.util.vector.Vector3f;
  12. import org.lwjgl.util.vector.Vector4f;
  13.  
  14. import base.Matrices;
  15.  
  16. import model.Model;
  17. import model.OBJLoader;
  18. import model.ShaderHandler;
  19.  
  20. public class Cube {
  21. Model cube = new Model();
  22. int vaoId, vertexVboId, indexVboId;
  23. int vsId, fsId, pId;
  24. public Cube(){
  25. cube = OBJLoader.loadObj("res/cube.obj");
  26. }
  27.  
  28. public void setup(){
  29. int size = cube.vertices.size();
  30. FloatBuffer vertexBuffer = BufferUtils.createFloatBuffer(size * 3);
  31. for(int i = 0; i < size; i++){
  32. vertexBuffer.put(cube.vertices.get(i).x);
  33. vertexBuffer.put(cube.vertices.get(i).y);
  34. vertexBuffer.put(cube.vertices.get(i).z);
  35. }
  36. vertexBuffer.flip();
  37.  
  38. size = cube.indices.size();
  39. IntBuffer indexBuffer = BufferUtils.createIntBuffer(size * 3);
  40. for(int i = 0; i < size; i++){
  41. indexBuffer.put((int)cube.indices.get(i).x);
  42. indexBuffer.put((int)cube.indices.get(i).y);
  43. indexBuffer.put((int)cube.indices.get(i).z);
  44. }
  45. indexBuffer.flip();
  46.  
  47. vaoId = GL30.glGenVertexArrays();
  48. GL30.glBindVertexArray(vaoId);
  49.  
  50. vertexVboId = GL15.glGenBuffers();
  51. GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vertexVboId);
  52. GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexBuffer, GL15.GL_STATIC_DRAW);
  53. GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0);
  54. GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0);
  55. GL30.glBindVertexArray(0);
  56.  
  57. indexVboId = GL15.glGenBuffers();
  58. GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indexVboId);
  59. GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indexBuffer, GL15.GL_STATIC_DRAW);
  60. GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
  61. }
  62.  
  63. public void setupShaders(){
  64. vsId = ShaderHandler.loadShader("res/cube_vs.glsl", GL20.GL_VERTEX_SHADER);
  65. fsId = ShaderHandler.loadShader("res/cube_fs.glsl", GL20.GL_FRAGMENT_SHADER);
  66.  
  67. pId = GL20.glCreateProgram();
  68. GL20.glAttachShader(pId, vsId);
  69. GL20.glAttachShader(pId, fsId);
  70. GL20.glLinkProgram(pId);
  71.  
  72. //GL20.glBindAttribLocation(pId, 0, "position");
  73.  
  74. Matrices.perspectiveMatrixLocation = GL20.glGetUniformLocation(pId, "perspectiveMatrix");
  75. Matrices.viewMatrixLocation = GL20.glGetUniformLocation(pId, "viewMatrix");
  76. Matrices.modelMatrixLocation = GL20.glGetUniformLocation(pId, "modelMatrix");
  77.  
  78. GL20.glValidateProgram(pId);
  79. }
  80.  
  81. public void render(){
  82. Matrices.uploadMatrices(pId, Matrices.perspectiveMatrixLocation, Matrices.viewMatrixLocation, Matrices.modelMatrixLocation);
  83. GL20.glUseProgram(pId);
  84. GL30.glBindVertexArray(vaoId);
  85. GL20.glEnableVertexAttribArray(0);
  86. GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, indexVboId);
  87. GL11.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_LINE);
  88. GL11.glDrawElements(GL11.GL_TRIANGLES, cube.indices.size() * 3, GL11.GL_UNSIGNED_INT, 0);
  89. GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0);
  90. GL20.glDisableVertexAttribArray(0);
  91. GL30.glBindVertexArray(0);
  92. GL20.glUseProgram(0);
  93. }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment