Android Open Source - OpenGL-Sample-Android Cube






From Project

Back to project page OpenGL-Sample-Android.

License

The source code is released under:

GNU General Public License

If you think the Android project OpenGL-Sample-Android listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.soft.wz.sample.primitives;
/*from   www  .j ava 2  s  . c  om*/
import android.opengl.GLES20;

import com.soft.wz.sample.utils.GlHelper;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import java.nio.ShortBuffer;

public class Cube implements Shape {

    private final String vertexShaderCode =
            "uniform mat4 mvpMatrix;" +
                    "attribute vec4 vPosition;" +
                    "void main() {" +
                    "  gl_Position = mvpMatrix * vPosition;" +
                    "}";

    private final String fragmentShaderCode =
            "precision mediump float;" +
                    "uniform vec4 vColor;" +
                    "void main() {" +
                    "  gl_FragColor = vColor;" +
                    "}";

    private final FloatBuffer vertexBuffer;
    private final ShortBuffer drawListBuffer;
    private final int program;
    private int positionHandle;
    private int colorHandle;
    private int mvpMatrixHandle;

    // number of coordinates per vertex in this array
    private static final int COORDINATES_PER_VERTEX = 3;

    private static final float SQUARE_COORDINATES[] = {
            -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
    };

    private final static short INDICES[] = {
            0, 4, 5, 0, 5, 1,
            1, 5, 6, 1, 6, 2,
            2, 6, 7, 2, 7, 3,
            3, 7, 4, 3, 4, 0,
            4, 7, 6, 4, 6, 5,
            3, 0, 1, 3, 1, 2
    };

    private final int vertexStride = COORDINATES_PER_VERTEX * 4;

    public Cube() {
        ByteBuffer bb = ByteBuffer.allocateDirect(SQUARE_COORDINATES.length * 4);
        bb.order(ByteOrder.nativeOrder());
        vertexBuffer = bb.asFloatBuffer();
        vertexBuffer.put(SQUARE_COORDINATES);
        vertexBuffer.position(0);

        ByteBuffer dlb = ByteBuffer.allocateDirect(
                INDICES.length * 2);
        dlb.order(ByteOrder.nativeOrder());
        drawListBuffer = dlb.asShortBuffer();
        drawListBuffer.put(INDICES);
        drawListBuffer.position(0);

        int vertexShader = GlHelper.loadShader(
                GLES20.GL_VERTEX_SHADER,
                vertexShaderCode);
        int fragmentShader = GlHelper.loadShader(
                GLES20.GL_FRAGMENT_SHADER,
                fragmentShaderCode);

        program = GLES20.glCreateProgram();
        GLES20.glAttachShader(program, vertexShader);
        GLES20.glAttachShader(program, fragmentShader);
        GLES20.glLinkProgram(program);
    }

    public void draw(float[] mvpMatrix) {
        GLES20.glUseProgram(program);

        positionHandle = GLES20.glGetAttribLocation(program, "vPosition");

        GLES20.glEnableVertexAttribArray(positionHandle);

        GLES20.glVertexAttribPointer(
                positionHandle, COORDINATES_PER_VERTEX,
                GLES20.GL_FLOAT, false,
                vertexStride, vertexBuffer);

        colorHandle = GLES20.glGetUniformLocation(program, "vColor");

        GLES20.glUniform4fv(colorHandle, 1, Colors.VIOLET, 0);

        mvpMatrixHandle = GLES20.glGetUniformLocation(program, "mvpMatrix");
        GlHelper.checkGlError("glGetUniformLocation");

        GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false, mvpMatrix, 0);
        GlHelper.checkGlError("glUniformMatrix4fv");

        GLES20.glDrawElements(GLES20.GL_TRIANGLES, INDICES.length, GLES20.GL_UNSIGNED_SHORT, drawListBuffer);
        GLES20.glUniform4fv(colorHandle, 1, Colors.LIGHTLY_BLUE, 0);

        GLES20.glDrawElements(
                GLES20.GL_LINE_STRIP, INDICES.length,
                GLES20.GL_UNSIGNED_SHORT, drawListBuffer);

        GLES20.glDisableVertexAttribArray(positionHandle);
    }

}




Java Source Code List

com.soft.wz.sample.BasicRenderer.java
com.soft.wz.sample.MainActivity.java
com.soft.wz.sample.RenderView.java
com.soft.wz.sample.primitives.Circle.java
com.soft.wz.sample.primitives.Colors.java
com.soft.wz.sample.primitives.Cube.java
com.soft.wz.sample.primitives.Shape.java
com.soft.wz.sample.utils.CircularIterator.java
com.soft.wz.sample.utils.GlHelper.java