Пример #1
0
  /**
   * Creates vertex buffer objects to render this skybox.
   *
   * @param gl OpenGL interface
   */
  private void createVBO(GL gl) {
    FloatBuffer vertexBuffer =
        BufferUtil.newFloatBuffer(324); // 36 faces, 3 vertices per face, 3 co-ordinates per vertex
    FloatBuffer textureBuffer =
        BufferUtil.newFloatBuffer(216); // 36 faces, 3 vertices per face, 2 co-ordinates per vertex
    nVertices = populateVBOWithVertices(vertexBuffer);
    vertexBuffer.flip();
    populateVBOWithTextureCoords(textureBuffer);
    textureBuffer.flip();

    gl.glGenBuffersARB(2, VBOIds, 0);

    // Load buffer into graphics card memory
    // Vertex coordinates
    gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, VBOIds[0]); // Bind The Buffer
    gl.glBufferDataARB(
        GL.GL_ARRAY_BUFFER_ARB,
        nVertices * 3 * BufferUtil.SIZEOF_FLOAT,
        vertexBuffer,
        GL.GL_STATIC_DRAW_ARB);

    gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, VBOIds[1]);
    gl.glBufferDataARB(
        GL.GL_ARRAY_BUFFER_ARB,
        nVertices * 2 * BufferUtil.SIZEOF_FLOAT,
        textureBuffer,
        GL.GL_STATIC_DRAW_ARB);

    vertexBuffer = null;
    textureBuffer = null;
  }
Пример #2
0
  private void buildLeavesVBO(GL gl) {
    // Allocate buffer memory
    FloatBuffer leafVertexBuffer = BufferUtil.newFloatBuffer(81 * 6 * 3);
    FloatBuffer leafTextureBuffer = BufferUtil.newFloatBuffer(81 * 6 * 2);

    nLeafVertices = tree.createLeavesVBO(leafVertexBuffer, leafTextureBuffer);
    leafVertexBuffer.flip();
    leafTextureBuffer.flip();

    // Create VBO Id
    if (branchVBOIds[0] != 0) {
      gl.glDeleteBuffersARB(2, leafVBOIds, 0);
    }
    gl.glGenBuffersARB(2, leafVBOIds, 0); // Get Valid Names

    // Load buffer into graphics card memory
    // Vertex coordinates
    gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, leafVBOIds[0]); // Bind The Buffer
    gl.glBufferDataARB(
        GL.GL_ARRAY_BUFFER_ARB,
        nLeafVertices * 3 * BufferUtil.SIZEOF_FLOAT,
        leafVertexBuffer,
        GL.GL_STATIC_DRAW_ARB);

    gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, leafVBOIds[1]);
    gl.glBufferDataARB(
        GL.GL_ARRAY_BUFFER_ARB,
        nLeafVertices * 2 * BufferUtil.SIZEOF_FLOAT,
        leafTextureBuffer,
        GL.GL_STATIC_DRAW_ARB);

    leafVertexBuffer = null;
    leafTextureBuffer = null;
  }
Пример #3
0
  public static int createGLResource(int type, int param) {
    int id = 0;
    if (type == GL_TEXTURE_OBJECT) {
      int[] temp = new int[1];
      gl.glGenTextures(1, temp, 0);
      id = temp[0];
      glTextureObjects.add(id);
    } else if (type == GL_VERTEX_BUFFER) {
      int[] temp = new int[1];
      gl.glGenBuffersARB(1, temp, 0);
      id = temp[0];
      glVertexBuffers.add(id);
    } else if (type == GL_FRAME_BUFFER) {
      int[] temp = new int[1];
      gl.glGenFramebuffersEXT(1, temp, 0);
      id = temp[0];
      glFrameBuffers.add(id);
    } else if (type == GL_RENDER_BUFFER) {
      int[] temp = new int[1];
      gl.glGenRenderbuffersEXT(1, temp, 0);
      id = temp[0];
      glRenderBuffers.add(id);
    } else if (type == GLSL_PROGRAM) {
      id = gl.glCreateProgram();
      glslPrograms.add(id);
    } else if (type == GLSL_SHADER) {
      id = gl.glCreateShader(param);
      glslShaders.add(id);
    }

    return id;
  }
Пример #4
0
  private void buildFruitVBO(GL gl) {
    // Allocate buffer memory
    FloatBuffer vertexBuffer =
        BufferUtil.newFloatBuffer(
            40 * 36 * 3); // 40 fruits, 36 vertices per fruit, 3 coordinates per vertex
    FloatBuffer normalBuffer = BufferUtil.newFloatBuffer(40 * 36 * 3);
    FloatBuffer textureCoordBuffer = BufferUtil.newFloatBuffer(40 * 36 * 2);
    //		FloatBuffer attributeBuffer = BufferUtil.newFloatBuffer(40 * 36 * 4);
    //	    FloatBuffer baseCenterBuffer = BufferUtil.newFloatBuffer(40 * 36 * 3);
    //	    FloatBuffer transformationRow1Buffer = BufferUtil.newFloatBuffer(40 * 36 * 4);
    //	    FloatBuffer transformationRow2Buffer = BufferUtil.newFloatBuffer(40 * 36 * 4);
    //	    FloatBuffer transformationRow3Buffer = BufferUtil.newFloatBuffer(40 * 36 * 4);
    //	    FloatBuffer transformationRow4Buffer = BufferUtil.newFloatBuffer(40 * 36 * 4);

    nFruitVertices = tree.createFruitVBO(vertexBuffer, normalBuffer, textureCoordBuffer);
    //	    attributeBuffer, baseCenterBuffer, transformationRow1Buffer, transformationRow2Buffer,
    // transformationRow3Buffer, transformationRow4Buffer);

    vertexBuffer.flip();
    normalBuffer.flip();
    textureCoordBuffer.flip();
    //    	attributeBuffer.flip();
    //    	baseCenterBuffer.flip();
    //    	transformationRow1Buffer.flip();
    //    	transformationRow2Buffer.flip();
    //    	transformationRow3Buffer.flip();
    //    	transformationRow4Buffer.flip();

    // Create VBO Id
    gl.glGenBuffersARB(1, fruitVBOIds, 0); // Get Valid Names

    // Load buffer into graphics card memory
    // Vertex coordinates
    gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[0]); // Bind The Buffer
    gl.glBufferDataARB(
        GL.GL_ARRAY_BUFFER_ARB,
        nFruitVertices * 3 * BufferUtil.SIZEOF_FLOAT,
        vertexBuffer,
        GL.GL_DYNAMIC_DRAW_ARB);

    //        //Vertex attributes
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[1]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, attributeBuffer, GL.GL_DYNAMIC_DRAW_ARB);
    //
    //        //branch base centers
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[2]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 3 *
    // BufferUtil.SIZEOF_FLOAT, baseCenterBuffer, GL.GL_DYNAMIC_DRAW_ARB);
    //
    //        //branch transformations
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[3]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, transformationRow1Buffer, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[4]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, transformationRow2Buffer, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[5]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, transformationRow3Buffer, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, fruitVBOIds[6]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nFruitVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, transformationRow4Buffer, GL.GL_DYNAMIC_DRAW_ARB);

    // Our Copy Of The Data Is No Longer Necessary, It Is Safe In The Graphics Card
    vertexBuffer = null;
    textureCoordBuffer = null;
    //        attributeBuffer = null;
    //        baseCenterBuffer = null;
    //        transformationRow1Buffer = null;
    //        transformationRow2Buffer = null;
    //        transformationRow3Buffer = null;
    //        transformationRow4Buffer = null;
  }
Пример #5
0
  private void buildBranchVBO(GL gl) {
    // Allocate buffer memory
    FloatBuffer branchVertices =
        BufferUtil.newFloatBuffer(
            40 * 24 * 3); // 40 branches, 24 vertices per branch, 3 coordinates per vertex
    FloatBuffer normalBuffer = BufferUtil.newFloatBuffer(40 * 24 * 3);
    FloatBuffer textureCoordBuffer = BufferUtil.newFloatBuffer(40 * 24 * 2);

    //		FloatBuffer branchAttributes = BufferUtil.newFloatBuffer(40 * 24 * 4);
    //	    FloatBuffer branchBaseCenters = BufferUtil.newFloatBuffer(40 * 24 * 3);
    //	    FloatBuffer branchTransformationsRow1 = BufferUtil.newFloatBuffer(40 * 24 * 4);
    //	    FloatBuffer branchTransformationsRow2 = BufferUtil.newFloatBuffer(40 * 24 * 4);
    //	    FloatBuffer branchTransformationsRow3 = BufferUtil.newFloatBuffer(40 * 24 * 4);
    //	    FloatBuffer branchTransformationsRow4 = BufferUtil.newFloatBuffer(40 * 24 * 4);
    //	    FloatBuffer colorBuffer = BufferUtil.newFloatBuffer(40 * 24 * 4);

    if (tree.needsGeometryCreation()) {
      // Create the tree - creates child branches and leaves and adds vertices to the buffer
      nBranchVertices = tree.create(branchVertices, normalBuffer, textureCoordBuffer);
      //	    			branchAttributes, branchBaseCenters, branchTransformationsRow1,
      // branchTransformationsRow2, branchTransformationsRow3, branchTransformationsRow4);
    } else { // hasFreshlyGrown returns true here
      // Grow the tree - updates bounding box of each branch and adds vertices to the buffer
      // System.out.println("Calling trunk.grow()");
      nBranchVertices = tree.grow(branchVertices, normalBuffer, textureCoordBuffer);
      //	    	branchAttributes, branchBaseCenters, branchTransformationsRow1,
      // branchTransformationsRow2, branchTransformationsRow3, branchTransformationsRow4);
    }
    branchVertices.flip();
    normalBuffer.flip();
    textureCoordBuffer.flip();
    //    	branchAttributes.flip();
    //    	branchBaseCenters.flip();
    //    	branchTransformationsRow1.flip();
    //    	branchTransformationsRow2.flip();
    //    	branchTransformationsRow3.flip();
    //    	branchTransformationsRow4.flip();

    // Create VBO Id
    if (branchVBOIds[0] != 0) {
      gl.glDeleteBuffersARB(1, branchVBOIds, 0);
    }
    //    	System.out.println("branchVBOIds[2] = " + branchVBOIds[2]);
    gl.glGenBuffersARB(1, branchVBOIds, 0); // Get Valid Names

    // Load buffer into graphics card memory
    // Vertex coordinates
    gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[0]); // Bind The Buffer
    gl.glBufferDataARB(
        GL.GL_ARRAY_BUFFER_ARB,
        nBranchVertices * 3 * BufferUtil.SIZEOF_FLOAT,
        branchVertices,
        GL.GL_STATIC_DRAW_ARB);

    //        //Vertex attributes
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[1]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchAttributes, GL.GL_STATIC_DRAW_ARB);
    //
    //        //branch base centers
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[2]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 3 *
    // BufferUtil.SIZEOF_FLOAT, branchBaseCenters, GL.GL_STATIC_DRAW_ARB);
    //
    //        //branch transformations
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[3]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow1, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[4]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow2, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[5]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow3, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[6]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow4, GL.GL_STATIC_DRAW_ARB);

    // Our Copy Of The Data Is No Longer Necessary, It Is Safe In The Graphics Card
    branchVertices = null;
    textureCoordBuffer = null;
    //        branchAttributes = null;
    //        branchBaseCenters = null;
    //        branchTransformationsRow1 = null;
    //        branchTransformationsRow2 = null;
    //        branchTransformationsRow3 = null;
    //        branchTransformationsRow4 = null;
    //        colorBuffer = null;
  }
Пример #6
0
  private void buildHeapVBO(GL gl) {
    // Allocate buffer memory
    FloatBuffer branchVertices =
        BufferUtil.newFloatBuffer(
            24 * 3); // 1 bounding box of heap, 24 vertices of the box, 3 coordinates per vertex
    FloatBuffer textureCoordBuffer = BufferUtil.newFloatBuffer(24 * 3);
    //		FloatBuffer branchAttributes = BufferUtil.newFloatBuffer(24 * 4);
    //	    FloatBuffer branchBaseCenters = BufferUtil.newFloatBuffer(24 * 3);
    //	    FloatBuffer branchTransformationsRow1 = BufferUtil.newFloatBuffer(24 * 4);
    //	    FloatBuffer branchTransformationsRow2 = BufferUtil.newFloatBuffer(24 * 4);
    //	    FloatBuffer branchTransformationsRow3 = BufferUtil.newFloatBuffer(24 * 4);
    //	    FloatBuffer branchTransformationsRow4 = BufferUtil.newFloatBuffer(24 * 4);

    // Create bounding box for the heap
    nBranchVertices = tree.createHeapBoundingBox(branchVertices, textureCoordBuffer);
    //		branchAttributes, branchBaseCenters, branchTransformationsRow1, branchTransformationsRow2,
    // branchTransformationsRow3, branchTransformationsRow4);

    branchVertices.flip();
    textureCoordBuffer.flip();
    //    	branchAttributes.flip();
    //    	branchBaseCenters.flip();
    //    	branchTransformationsRow1.flip();
    //    	branchTransformationsRow2.flip();
    //    	branchTransformationsRow3.flip();
    //    	branchTransformationsRow4.flip();

    if (branchVBOIds[0] != 0) {
      gl.glDeleteBuffersARB(1, branchVBOIds, 0);
    }
    // Create VBO Id
    gl.glGenBuffersARB(1, branchVBOIds, 0); // Get Valid Names

    // Load buffer into graphics card memory
    // Vertex coordinates
    gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[0]); // Bind The Buffer
    gl.glBufferDataARB(
        GL.GL_ARRAY_BUFFER_ARB,
        nBranchVertices * 3 * BufferUtil.SIZEOF_FLOAT,
        branchVertices,
        GL.GL_STATIC_DRAW_ARB);

    //        //Vertex attributes
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[1]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchAttributes, GL.GL_STATIC_DRAW_ARB);
    //
    //        //branch base centers
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[2]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 3 *
    // BufferUtil.SIZEOF_FLOAT, branchBaseCenters, GL.GL_STATIC_DRAW_ARB);
    //
    //        //branch transformations
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[3]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow1, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[4]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow2, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[5]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow3, GL.GL_STATIC_DRAW_ARB);
    //
    //        gl.glBindBufferARB(GL.GL_ARRAY_BUFFER_ARB, branchVBOIds[6]);
    //        gl.glBufferDataARB(GL.GL_ARRAY_BUFFER_ARB, nBranchVertices * 4 *
    // BufferUtil.SIZEOF_FLOAT, branchTransformationsRow4, GL.GL_STATIC_DRAW_ARB);

    // Our Copy Of The Data Is No Longer Necessary, It Is Safe In The Graphics Card
    branchVertices = null;
    textureCoordBuffer = null;
    //        branchAttributes = null;
    //        branchBaseCenters = null;
    //        branchTransformationsRow1 = null;
    //        branchTransformationsRow2 = null;
    //        branchTransformationsRow3 = null;
    //        branchTransformationsRow4 = null;
  }