0

我的 android 应用程序目前有一个由两个三角形组成的正方形。我不知道如何为正方形添加与填充颜色不同的边框颜色。我觉得这与我拥有的 GLSL 代码有关。这是我当前的Square对象代码:

public class Square implements Shape
{
    private ByteBuffer bb;
    private ByteBuffer dlb;
    private ShortBuffer drawOrderBuffer;
    private FloatBuffer vertexBuffer;
    private final int COORDS_PER_VERTEX = 3;
    private int vertexShader;
    private int fragmentShader;
    private int program;
    private int vPositionHandler;
    private int vColorHandler;
    private int mMVPMatrix;
    private short[] drawOrder = {0, 1, 2, 0, 2, 3};

    private final String VERTEX_CODE = 
        "uniform mat4 matrix;" +
        "attribute vec4 vPosition;" +
        "void main() {" +
        "gl_Position = vPosition * matrix;" +
        "}";
    private final String FRAGMENT_CODE = 
        "precision mediump float;" +
        "uniform vec4 vColor;" +
        "void main() {" +
        "gl_FragColor = vColor;" +
        "}";

public Square(float[] coords, float[] color)
{
    // Allocate 4 bytes for each float that the coordinate array contains
    bb = ByteBuffer.allocateDirect(coords.length * 4);
    bb.order(ByteOrder.nativeOrder());

    vertexBuffer = bb.asFloatBuffer();
    vertexBuffer.put(coords);
    vertexBuffer.position(0);

    // Allocate 2 bytes for each float that the drawOrder array contains
    dlb = ByteBuffer.allocateDirect(drawOrder.length * 2);
    dlb.order(ByteOrder.nativeOrder());
    drawOrderBuffer = dlb.asShortBuffer();
    drawOrderBuffer.put(drawOrder);
    drawOrderBuffer.position(0);

    vertexShader = MyRenderer.loadShader(GLES20.GL_VERTEX_SHADER, VERTEX_CODE);
    fragmentShader = MyRenderer.loadShader(GLES20.GL_FRAGMENT_SHADER,                  
        FRAGMENT_CODE);

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

    vPositionHandler = GLES20.glGetAttribLocation(program, "vPosition");
    GLES20.glEnableVertexAttribArray(vPositionHandler);
    GLES20.glVertexAttribPointer(vPositionHandler, COORDS_PER_VERTEX,
        GLES20.GL_FLOAT, false, 0, vertexBuffer);

    vColorHandler = GLES20.glGetUniformLocation(program, "vColor");
    GLES20.glUniform4fv(vColorHandler, 1, color, 0);
}

@Override
public void draw(float[] matrix) 
{
    mMVPMatrix = GLES20.glGetUniformLocation(program, "matrix");
    GLES20.glUniformMatrix4fv(mMVPMatrix, 1, false, matrix, 0);

    GLES20.glDrawElements(GLES20.GL_TRIANGLES, drawOrder.length, 
        GLES20.GL_UNSIGNED_SHORT, drawOrderBuffer);
    GLES20.glDisableVertexAttribArray(vPositionHandler);
}
}
4

0 回答 0