Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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 int normalPointer;
- private FloatBuffer vertexBuffer;
- private FloatBuffer colorBuffer;
- private FloatBuffer normalBuffer;
- 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 float[] normalData = new float[108];
- 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(){
- for (int i = 0; i < vertexData.length; i += 9) {
- float[] v1 = {vertexData[i], vertexData[i + 1], vertexData[i + 2]};
- float[] v2 = {vertexData[i + 3], vertexData[i + 4], vertexData[i + 5]};
- float[] v3 = {vertexData[i + 6], vertexData[i + 7], vertexData[i + 8]};
- float[] triangleNormal = getTriangleNormal(v1[0], v1[1], v1[2], v2[0], v2[1], v2[2], v3[0], v3[1], v3[2]);
- normalData[i] = triangleNormal[0];
- normalData[i + 1] = triangleNormal[1];
- normalData[i + 2] = triangleNormal[2];
- normalData[i + 3] = triangleNormal[0];
- normalData[i + 4] = triangleNormal[1];
- normalData[i + 5] = triangleNormal[2];
- normalData[i + 6] = triangleNormal[0];
- normalData[i + 7] = triangleNormal[1];
- normalData[i + 8] = triangleNormal[2];
- }
- vertexBuffer = BufferUtils.createFloatBuffer(108);
- vertexBuffer.put(vertexData);
- vertexBuffer.flip();
- colorBuffer = BufferUtils.createFloatBuffer(108);
- colorBuffer.put(colorData);
- colorBuffer.flip();
- normalBuffer = BufferUtils.createFloatBuffer(108);
- normalBuffer.put(normalData);
- normalBuffer.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);
- normalPointer = glGenBuffers();
- glBindBuffer(GL_ARRAY_BUFFER, normalPointer);
- glBufferData(GL_ARRAY_BUFFER, normalBuffer, GL_STATIC_DRAW);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- }
- public void render() {
- glPushMatrix();
- glTranslatef(location.x, location.y, location.z);
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_COLOR_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
- glBindBuffer(GL_ARRAY_BUFFER, vertexPointer);
- glVertexPointer(3, GL_FLOAT, 0, 0);
- glBindBuffer(GL_ARRAY_BUFFER, colorPointer);
- glColorPointer(3, GL_FLOAT, 0, 0);
- glBindBuffer(GL_ARRAY_BUFFER, normalPointer);
- glNormalPointer(GL_FLOAT, 0, 0);
- glDrawArrays(GL_TRIANGLES, 0, 12 * 3);
- glDisableClientState(GL_VERTEX_ARRAY);
- glDisableClientState(GL_COLOR_ARRAY);
- glDisableClientState(GL_NORMAL_ARRAY);
- glPopMatrix();
- }
- public void update(){
- }
- public void destroy(){
- glDeleteBuffers(vertexPointer);
- glDeleteBuffers(normalPointer);
- glDeleteBuffers(colorPointer);
- }
- public static float[] getTriangleNormal(float argument0, float argument1,
- float argument2, float argument3, float argument4, float argument5,
- float argument6, float argument7, float argument8) {
- float ax, ay, az, bx, by, bz, m, rx, ry, rz;
- // point0 -> point1
- ax = argument3 - argument0;
- ay = argument4 - argument1;
- az = argument5 - argument2;
- // point0 -> point2
- bx = argument6 - argument0;
- by = argument7 - argument1;
- bz = argument8 - argument2;
- // cross product
- rx = ay * bz - by * az;
- ry = az * bx - bz * ax;
- rz = ax * by - bx * ay;
- // magnitude
- m = (float) Math.sqrt(rx * rx + ry * ry + rz * rz);
- // normalize
- rx /= m;
- ry /= m;
- rz /= m;
- return new float[] { rx, ry, rz };
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement