Android OpenGL ES 2.0 手把手教學(5)- 繪製模式

程式設計師kenney發表於2019-04-20

大家好,下面和大學一起學習繪製模式,在我的github上有一個專案OpenGLES2.0SamplesForAndroid,我會不斷地編寫學習樣例,文章和程式碼同步更新,歡迎關注,連結:github.com/kenneycode/…

在我們之前的例子中,我們都是以三個獨立頂點為一個三角形的方式來進行渲染,如果大家有注意觀察的話,會發現我們在呼叫glDrawArrays()方法的時候,第一個引數都是用GL_TRIANGLES,這第一個引數就是用來設定繪製模式的,下面給大家介紹三個比較常用的繪製模式GL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN,我們先來看一張圖:

Android OpenGL ES 2.0 手把手教學(5)- 繪製模式

這張圖展示了這三種繪製模式的區別

GL_TRIANGLES就是我們之前的例子中一直在用的,它是將每三個獨立頂點構成一個三角形,不同三角形之間不會共用頂點

GL_TRIANGLE_STRIP的效果就像它名字一樣,是帶狀的,它構成三角的規則和頂點數量的奇偶有關,如果頂點數量是奇數,則三角形為k, k+1, k+2, 如果頂點數量是偶數,則三角形為k, k+2, k+1,這是什麼意思呢?我們對照上圖來看,假如頂點數量是5,那麼就是(v0, v1, v2)、(v1, v2, v3)、(v2, v3, v4)三個三角形,假如頂點數量是4,那麼就是(v0, v2, v1)、(v1, v3, v2)兩個三角形,可以看它三角形頂點是會共用的。

GL_TRIANGLE_FAN的效果也像它名字一樣,一扇形的,以第0個點為扇形的中心,其它點就連線0號點與上一個點構成三角形。

這三種繪製模式各有特點,可根據實際需要來採用,在能滿足需求的情況下,儘量採用傳遞頂點少的方式,可以提高效能,例如我們之前的例子中,是否能用GL_TRIANGLE_STRIP或者GL_TRIANGLE_FAN來替代,減少傳遞的頂點呢?大家可以思考一下。

我們來看看例子中的效果,從左到右依次是GL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN,可以通過按鈕切換:

Android OpenGL ES 2.0 手把手教學(5)- 繪製模式

程式碼在我github的OpenGLES2.0SamplesForAndroid專案中,本文對應的是SampleDrawMode,專案連結:github.com/kenneycode/…

感謝閱讀!

相關文章