我的 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);
}
}