我正在尝试使用 OpenGL-ES 在 Android 上绘制白色四边形,但颜色正在褪色。
见图:http://img88.imageshack.us/img88/2787/tempew.png
我也用 int numVertices = 4;
尝试过,但我没有变红而是变黑了。这是怎么回事?
int numVertices = 6;
private FloatBuffer vertexBuffer, colorBuffer;
private ShortBuffer indexBuffer;
private short[] indices = { 0, 1, 2,
2, 3, 0 };
public Floor (float coords[][]) {
float vertices[] = new float[numVertices*3];
float colors[] = new float[numVertices*4];
//Set colors
for(int i=0; i < numVertices; i++){
colors[i] = 1.0f; //red
colors[i+1] = 1.0f; //grn
colors[i+2] = 1.0f; //blu
colors[i+3] = 1.0f; //alpha
}
vertices[0] = coords[0][0];
vertices[1] = coords[0][1];
vertices[2] = coords[0][2];
vertices[3] = coords[1][0];
vertices[4] = coords[1][1];
vertices[5] = coords[1][2];
vertices[6] = coords[2][0];
vertices[7] = coords[2][1];
vertices[8] = coords[2][2];
vertices[9] = coords[3][0];
vertices[10] = coords[3][1];
vertices[11] = coords[3][2];
ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length * 4);
vbb.order(ByteOrder.nativeOrder());
vertexBuffer = vbb.asFloatBuffer();
vertexBuffer.put(vertices);
vertexBuffer.position(0);
ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length * 4);
cbb.order(ByteOrder.nativeOrder());
colorBuffer = cbb.asFloatBuffer();
colorBuffer.put(colors);
colorBuffer.position(0);
ByteBuffer ibb = ByteBuffer.allocateDirect(indices.length * 2);
ibb.order(ByteOrder.nativeOrder());
indexBuffer = ibb.asShortBuffer();
indexBuffer.put(indices);
indexBuffer.position(0);
}
/**
* This function draws our square on screen.
* @param gl
*/
public void draw(GL10 gl) {
gl.glDisable(GL10.GL_COLOR_MATERIAL);
gl.glDisable(GL10.GL_BLEND);
gl.glDisable(GL10.GL_LIGHTING);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);
gl.glPointSize(2.0f);
gl.glDrawElements(GL10.GL_TRIANGLES, indices.length, GL10.GL_UNSIGNED_SHORT, indexBuffer);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
}
感谢您的帮助!
想通了。对于遇到如何执行此操作的任何其他人,需要修复:
int numVertices = 4;
//Set colors
for(int i=0; i < numVertices; i++){
colors[i*4] = 1.0f; //red
colors[i*4+1] = 1.0f; //grn
colors[i*4+2] = 1.0f; //blu
colors[i*4+3] = 1.0f; //alpha
}
最佳答案
for(int i=0; i < numVertices; i++){
colors[i] = 1.0f; //red
colors[i+1] = 1.0f; //grn
colors[i+2] = 1.0f; //blu
colors[i+3] = 1.0f; //alpha
}
这并不像您认为的那样。你需要写 i += 4
。
否则,您会按预期初始化 numVertices/4 + 4 个组件,而不是 numVertices*4。
关于android - OpenGL : Drawing Quad - Color fading issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6653032/