你們好,下面和大學一塊兒學習繪製模式,在個人github上有一個項目OpenGLES2.0SamplesForAndroid
,我會不斷地編寫學習樣例,文章和代碼同步更新,歡迎關注,連接:github.com/kenneycode/…git
在咱們以前的例子中,咱們都是以三個獨立頂點爲一個三角形的方式來進行渲染,若是你們有注意觀察的話,會發現咱們在調用glDrawArrays()
方法的時候,第一個參數都是用GL_TRIANGLES
,這第一個參數就是用來設置繪製模式的,下面給你們介紹三個比較經常使用的繪製模式GL_TRIANGLES
、GL_TRIANGLE_STRIP
和GL_TRIANGLE_FAN
,咱們先來看一張圖:github
這張圖展現了這三種繪製模式的區別性能
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)
兩個三角形,能夠看它三角形頂點是會共用的。code
GL_TRIANGLE_FAN
的效果也像它名字同樣,一扇形的,以第0個點爲扇形的中心,其它點就鏈接0號點與上一個點構成三角形。cdn
這三種繪製模式各有特色,可根據實際須要來採用,在能知足需求的狀況下,儘可能採用傳遞頂點少的方式,能夠提升性能,例如咱們以前的例子中,是否能用GL_TRIANGLE_STRIP
或者GL_TRIANGLE_FAN
來替代,減小傳遞的頂點呢?你們能夠思考一下。blog
咱們來看看例子中的效果,從左到右依次是GL_TRIANGLES
、GL_TRIANGLE_STRIP
和GL_TRIANGLE_FAN
,能夠經過按鈕切換:get
代碼在我github的OpenGLES2.0SamplesForAndroid
項目中,本文對應的是SampleDrawMode
,項目連接:github.com/kenneycode/…同步
感謝閱讀!it