Android OpenGL ES學習筆記之新增顏色
阿新 • • 發佈:2019-02-04
一、分類
新增顏色的種類有兩種
- Flat coloring 單色
- Smooth coloring 平滑著色
單色
顧命思義就是一種單一的顏色,呼叫 glColor4f(float red, float green, float blue, float alpha)方法傳入紅、綠、藍、透明度四個引數,取值0~1f。
public class MyRenderer implements GLSurfaceView.Renderer {
//頂點陣列
private float[] mArray = {
-0.6 f , 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);
執行,效果如下圖