android平臺下OpenGL ES 3.0繪製彩色三角形
阿新 • • 發佈:2018-11-06
OpenGL ES 3.0學習實踐
- android平臺下OpenGL ES 3.0從零開始
- android平臺下OpenGL ES 3.0繪製純色背景
- android平臺下OpenGL ES 3.0繪製圓點、直線和三角形
- android平臺下OpenGL ES 3.0繪製彩色三角形
- android平臺下OpenGL ES 3.0從矩形中看矩陣和座標系
本例基於android平臺下OpenGLES3.0繪製圓點、直線和三角形
目錄
頂點著色器
#version 300 es
layout (location = 0) in vec4 vPosition;
layout (location = 1) in vec4 aColor;
out vec4 vColor;
void main() {
gl_Position = vPosition;
gl_PointSize = 10.0;
vColor = aColor;
}
上述頂點著色器的描述:
- 第一行表示:著色器的版本,OpenGL ES 2.0版本可以不寫。
- 第二行表示:輸入一個名為
vPosition
的4分量向量,layout (location = 0)
- 第三行表示:輸入一個名為
aColor
的4分量向量,layout (location = 1)
表示這個變數的位置是頂點屬性1。 - 第四行表示:輸出一個名為
vColor
的4分量向量 - 第八行表示:將輸入資料
aColor
拷貝到vColor
的變數中。
片段著色器
#version 300 es
precision mediump float;
in vec4 vColor;
out vec4 fragColor;
void main() {
fragColor = vColor;
}
上述片段著色器的描述:
- 第一行表示:著色器的版本,OpenGL ES 2.0版本可以不寫。
- 第二行表示:宣告著色器中浮點變數的預設精度。
- 第三行表示: 宣告一個輸入名為
vColor
的4分向量 - 第四行表示:著色器宣告一個
輸出變數fragColor
,這個是一個4分量的向量。 - 第六行表示:表示將輸入的顏色值資料拷貝到
fragColor
變數中,輸出到顏色緩衝區。
基於sdk繪製彩色三角形
private float color[] = {
0.0f, 1.0f, 0.0f, 1.0f,
1.0f, 0.0f, 0.0f, 1.0f,
0.0f, 0.0f, 1.0f, 1.0f
};
由於虛擬機器
和OpenGL
執行環境不同,需要將虛擬機器資料傳輸到native層供其使用
建構函式中: 將顏色資料傳輸到native
層
colorBuffer = ByteBuffer.allocateDirect(color.length * 4)
.order(ByteOrder.nativeOrder())
.asFloatBuffer();
//傳入指定的資料
colorBuffer.put(color);
colorBuffer.position(0);
開始繪製:
@Override
public void onDrawFrame(GL10 gl) {
GLES30.glClear(GLES30.GL_COLOR_BUFFER_BIT);
//準備座標資料
GLES30.glVertexAttribPointer(0, POSITION_COMPONENT_COUNT, GLES30.GL_FLOAT, false, 0, vertexBuffer);
//啟用頂點的控制代碼
GLES30.glEnableVertexAttribArray(0);
//繪製三角形顏色
GLES30.glEnableVertexAttribArray(1);
GLES30.glVertexAttribPointer(1, 4, GLES30.GL_FLOAT, false, 0, colorBuffer);
GLES30.glDrawArrays(GLES30.GL_TRIANGLES, 0, 3);
//禁止頂點陣列的控制代碼
GLES30.glDisableVertexAttribArray(0);
GLES30.glDisableVertexAttribArray(1);
}
基於ndk繪製彩色三角形
基於ndk的繪製示例在下面的地址中,需要定義好jni的介面
,原理跟上述方式型別,不再贅述
專案地址:
https://github.com/byhook/opengles4android
參考:
《OpenGL ES 3.0 程式設計指南第2版》
《OpenGL ES應用開發實踐指南Android卷》