一、分類
添加顏色的種類有兩種
- Flat coloring 單色
- Smooth coloring 平滑着色
單色
顧命思義就是一種單一的顏色,調用 glColor4f(float red, float green, float blue, float alpha)方法傳入紅、綠、藍、透明度四個參數,取值0~1f。
還是以Android OpenGL ES學習筆記之繪製點代碼爲基礎
public class MyRenderer implements GLSurfaceView.Renderer {
//頂點數組
private float[] mArray = {
-0.6f , 0.6f , 0f,
-0.2f , 0f , 0f ,
0.2f , 0.6f , 0f ,
};
// 緩衝區
private FloatBuffer mBuffer;
public MyRenderer() {
//獲取浮點形緩衝數據
mBuffer = Utils.getFloatBuffer(mArray);
}
// Surface創建的時候調用
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
// 設置清屏顏色爲黑色
gl.glClearColor(0f, 0f, 0f, 0f);
}
// Surface改變的的時候調用
@Override
public void onSurfaceChanged(GL10 gl, int width, int height) {
// 設置窗口大小
gl.glViewport(0, 0, width , height);
}
// 在Surface上繪製的時候調用
@Override
public void onDrawFrame(GL10 gl) {
// 清除屏幕 gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_BUFFER_BIT);
// 允許設置頂點 // GL10.GL_VERTEX_ARRAY頂點數組
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
// 設置頂點
gl.glVertexPointer(3, GL10.GL_FLOAT, 0, mBuffer);
//設置點的顏色爲綠色
gl.glColor4f(0f, 1f, 0f, 0f);
//設置點的大小
gl.glPointSize(40f);
// 繪製點
gl.glDrawArrays(GL10.GL_TRIANGLE_FAN, 0, 3);
// 取消頂點設置
gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
}
}
其中設置顏色代碼
//設置點的顏色爲綠色
gl.glColor4f(0f, 1f, 0f, 0f);
效果如下圖,單一的綠色
平滑着色
就是給每個頂點定義一個顏色,然後頂點之間的面會顯示漸變色
調用glColorPointer(int size, int type, int stride, Buffer pointer)傳入四個參數
- size ———— 指明每個顏色的元素數量,必須爲4
- type————— 指明每個矩陣中顏色元素的數據類型
- stride————指明連續的點之間的位偏移,如果stride 爲0 時,顏色被緊密擠入矩陣,初始值爲0
- pointer———指明包含顏色的緩衝區
定義一個頂點顏色色組
//頂點顏色數組
private float[] mcolorArray = {
1f, 0f , 0f,0f,
0f , 1f , 0f ,0f,
0f , 0f , 1f ,0f
};
轉化成緩衝數據
//獲取浮點型顏色數據
colorBuffer= Utils.getFloatBuffer(mcolorArray);
在原來的代碼中加上
// 開啓顏色渲染功能.
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
// 設置三角形頂點的顏色
gl.glColorPointer(4, GL10.GL_FIXED, 0, colorBuffer);
//關閉顏色渲染功能.
gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
運行,效果如下圖