Android studio 在android studio中创建由三角形组成的彩色立方体

Android studio 在android studio中创建由三角形组成的彩色立方体,android-studio,opengl-es,cube,Android Studio,Opengl Es,Cube,我只修了一个三角形。这是代码,但不知道如何将其作为多维数据集。 我试图修复代码,但没有得到立方体,所以这段代码是在我销毁它之前。我也会试着让它旋转 公共阶级三角{ static final int VERTEX_POS_SIZE = 4; static final int COLOR_SIZE = 4; static final int VERTEX_POS_INDEX = 0; static final int COLOR_INDEX = 1; static final int VERTE

我只修了一个三角形。这是代码,但不知道如何将其作为多维数据集。 我试图修复代码,但没有得到立方体,所以这段代码是在我销毁它之前。我也会试着让它旋转

公共阶级三角{

static final int VERTEX_POS_SIZE = 4;
static final int COLOR_SIZE = 4;

static final int VERTEX_POS_INDEX = 0;
static final int COLOR_INDEX = 1;

static final int VERTEX_POS_OFFSET = 0;
static final int COLOR_OFFSET = 0;

static final int VERTEX_ATTRIB_SIZE = VERTEX_POS_SIZE;
static final int COLOR_ATTRIB_SIZE = COLOR_SIZE;

private final int VERTEX_COUNT = triangleData.length / VERTEX_ATTRIB_SIZE;

private FloatBuffer vertexDataBuffer;
private FloatBuffer colorDataBuffer;

static float triangleData[] = {   // in counterclockwise order:
        0.0f,  0.0f, 0.0f, 1.0f, // top
        1.0f, 0.0f, 0.0f, 1.0f, // bottom left
        1.0f, 0.0f, -1.0f, 1.0f, // bottom right
        0.0f, 0.0f, -1.0f, 1.0f,
        0.0f, 1.0f, 0.0f, 1.0f,
        1.0f, 1.0f, 0.0f, 1.0f,
        1.0f, 1.0f, -1.0f, 1.0f,
        0.0f, 1.0f, -1.0f, 1.0f,
};

static float colorData[] = {   // in counterclockwise order:
        1.0f, 0.0f, 0.0f, 1.0f, // Red
        0.0f, 1.0f, 0.0f, 1.0f, // Green
        0.0f, 0.0f, 1.0f, 1.0f// Blue
};

// Set color with red, green, blue and alpha (opacity) values
float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };

private final int mProgram;

private final String vertexShaderCode =
        // This matrix member variable provides a hook to manipulate
        // the coordinates of the objects that use this vertex shader
        "attribute vec4 vPosition; \n" +
        "attribute vec4 vColor; \n" +
        "uniform mat4 uMVPMatrix;\n" +
        "varying vec4 c; \n" +
        "void main() { \n" +
        "  c = vColor; \n" +
        // the matrix must be included as a modifier of gl_Position
        // Note that the uMVPMatrix factor *must be first* in order
        // for the matrix multiplication product to be correct.
        "  gl_Position = uMVPMatrix * vPosition;\n" +
        "}";

private final String fragmentShaderCode =
        "precision mediump float;\n" +
                "varying vec4 c;\n" +
                "void main() {\n" +
                "  gl_FragColor = c;\n" +
                "}";

// Use to access and set the view transformation
private int mMVPMatrixHandle;

private int positionHandle;
private int colorHandle;

public Triangle() {
    // initialize vertex byte buffer for shape coordinates
    ByteBuffer bbv = ByteBuffer.allocateDirect(
            // (number of coordinate values * 4 bytes per float)
            triangleData.length * 4);
    // use the device hardware's native byte order
    bbv.order(ByteOrder.nativeOrder());

    // create a floating point buffer from the ByteBuffer
    vertexDataBuffer = bbv.asFloatBuffer();
    // add the coordinates to the FloatBuffer
    vertexDataBuffer.put(triangleData);
    // set the buffer to read the first coordinate
    vertexDataBuffer.position(0);

    // initialize vertex byte buffer for shape coordinates
    ByteBuffer bbc = ByteBuffer.allocateDirect(
            // (number of coordinate values * 4 bytes per float)
            colorData.length * 4);
    // use the device hardware's native byte order
    bbc.order(ByteOrder.nativeOrder());

    // create a floating point buffer from the ByteBuffer
    colorDataBuffer = bbc.asFloatBuffer();
    // add the coordinates to the FloatBuffer
    colorDataBuffer.put(colorData);
    // set the buffer to read the first coordinate
    colorDataBuffer.position(0);

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

    // create empty OpenGL ES Program
    mProgram = GLES20.glCreateProgram();

    // add the vertex shader to program
    GLES20.glAttachShader(mProgram, vertexShader);

    // add the fragment shader to program
    GLES20.glAttachShader(mProgram, fragmentShader);

    // creates OpenGL ES program executables
    GLES20.glLinkProgram(mProgram);

}

public void draw(float[] mvpMatrix) {
    // Add program to OpenGL ES environment
    GLES20.glUseProgram(mProgram);

    // get handle to shape's transformation matrix
    mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");

    positionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
    GLES20.glEnableVertexAttribArray(positionHandle);

    // Prepare the triangle coordinate data
    GLES20.glVertexAttribPointer(positionHandle, VERTEX_POS_SIZE,
            GLES20.GL_FLOAT, false,
            VERTEX_ATTRIB_SIZE * 4, vertexDataBuffer);

    colorHandle = GLES20.glGetAttribLocation(mProgram, "vColor");
    GLES20.glEnableVertexAttribArray(colorHandle);
    GLES20.glVertexAttribPointer(colorHandle, COLOR_SIZE,
            GLES20.GL_FLOAT, false,
            COLOR_ATTRIB_SIZE * 4, colorDataBuffer);

    // Pass the projection and view transformation to the shader
    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);

    // Draw the triangle
    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, VERTEX_COUNT);

    // Disable vertex array
    GLES20.glDisableVertexAttribArray(positionHandle);
    GLES20.glDisableVertexAttribArray(colorHandle);

}
}