本文提供 OpenGL ES 範例, 作業環境為 Ubuntu 14.04 LTS 使用 Android Studio 1.2.1.1. 原始碼可從 GitHub 下載.

 

<<原始碼>>

QR SampleOpenGL  

<<範例一>>

創建 GLSurfaceView 與 SampleGLRenderer 物件並填满绿色背景. SampleGLRenderer 類别為 .Renderer 的實作.

Commit:

https://github.com/ArtisteHsu/SampleOpenGL/commit/5a689950ee8eea33bd67a22ffb191fbf20f926cd

<<範例二>>

使用 OpenGL ES2.0 的 Vexter shader 與 Fragment shader 繪製三角型.

Commit:

https://github.com/ArtisteHsu/SampleOpenGL/commit/98e2203d9cd2801fd9ab984f9b025995b3b76839

<<範例三>>

SampleGLTexture 類别使用 OpenGL ES 1.0 繪製方形並贴上纹理 (texture). 方形繪製使用 glDrawArrays() 與参數 GL_TRIANGLE_STRIP.

GL_TRIANGLE_STRIP 的運作方式請参考 http://www.matrix44.net/cms/notes/opengl-3d-graphics/understanding-gl_triangle_strip 

Commit:

https://github.com/ArtisteHsu/SampleOpenGL/commit/d314f4c5d689bf97b0e766f989d6d9a5ae55acc5

<<範例四>>

使用 OpenGL ES 2.0 的 Vexter shader 與 Fragment shader 繪製方形並贴上纹理 (Texture).

相較與 SampleGLTexture, SampleGLES20Texture 類别中加入 Vexter shader 與 Fragment shader, 另對於頂點 (Vertex) 與纹理 (Texture) 座標的配置也不同.

 

OpenGL ES 1.0:

gl.glVertexPointer(VERTEX_PER_COORDS, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, vertexCoords.length / VERTEX_PER_COORDS);

OpenGL ES 2.0:

 
// Get vertex position "vPosition" and texture coordinate "vTextCoord" handles
mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
mTexCoordHandle = GLES20.glGetAttribLocation(mProgram, "vTexCoord");

// Enable vertex handle
GLES20.glEnableVertexAttribArray(mPositionHandle);

// Set vertices data of vertex handle
GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false,
(COORDS_PER_VERTEX * BYTES_PER_FLOAT), vertexBuffer);

// Enable texture handle
GLES20.glEnableVertexAttribArray(mTexCoordHandle);

// Set texture coordinates of texture coordinate handle
GLES20.glVertexAttribPointer(mTexCoordHandle, COORDS_PER_TEXTURE, GLES20.GL_FLOAT, false,
(COORDS_PER_TEXTURE * BYTES_PER_FLOAT), textureBuffer);

// Draw square by GL_TRIANGLE_STRIP
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, vertexCoords.length / COORDS_PER_VERTEX);

 

Commit:

 

https://github.com/ArtisteHsu/SampleOpenGL/commit/cf813e32499a84861b0bc88fedfe5fe73d14f608

 

  

 

文章標籤
創作者介紹
創作者 版大 的頭像
版大

嵌入式系統

版大 發表在 痞客邦 留言(0) 人氣()