添加颜色的种类有两种:
1 2
| - Flat coloring 单色 - Smooth coloring 平滑着色
|
单色
单色就是单一的颜色,调用 glColor4f(float red, float green, float blue, float alpha)方法传入红、绿、蓝、透明度四个参数,取值0~1f。
1
| gl.glColor4f(0f, 1f, 0f, 0f);
|
平滑着色
就是给每个顶点定义一个颜色,然后顶点之间的面会显示渐变色
调用glColorPointer(int size, int type, int stride, Buffer pointer)传入四个参数:
1 2 3 4
| - size ———— 指明每个颜色的元素数量,必须为4 - type————— 指明每个矩阵中颜色元素的数据类型 - stride————指明连续的点之间的位偏移,如果stride 为0 时,颜色被紧密挤入矩阵,初始值为0 - pointer———指明包含颜色的缓冲区
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| @Override public void onDrawFrame(GL10 gl) {
gl.glClear(GL10.GL_COLOR_BUFFER_BIT); gl.glEnableClientState(GL10.GL_VERTEX_ARRAY); gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mBuffer);
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 5);
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
|
重要的点:
- 开启颜色渲染和设置三角形顶点的颜色必须要在绘制之前,如果都在绘制之后,上色会失败;
- 开启颜色渲染如果在绘制之前,设置三角形顶点的颜色在绘制之后,会crash;
- 如果颜色点比顶点少,可能会用黑色来代替,也可能会用中间的过渡色来给顶点上色,这可能会导致顶点的颜色不是设置的颜色;
- 多出的颜色值会被抛弃;
- alpha值好像没用,设置0和设置1都一样;