經過前面章節學習,我們對opengl es在android中開發有了基本的整體認識,知道頂點著色器和片段著色器,以及它們的寫法,可以繪製圖形(三角形)和影象(紋理操作),下面我們對前面章節的學習做個總結:
1)egl環境的搭建
.獲取預設顯示裝置
.初始化裝置
.配置顯示裝置
.建立eglcontext
.建立eglsu***ce
.eglcontext關聯到當前執行緒
2)attribute、uniform、varying修飾符
.attribute 只在頂點著色器中使用,用來儲存頂點、紋理等座標資料
.uniform 修飾的變數有全域性唯一性,可在頂點和片元著色器使用,不改變其值
.varying 其修飾的變數主要用來在頂點、片元著色器以及光柵階段透傳資料,可在頂點和片元著色器中使用
3)頂點和片元著色器
.opengl es著色語言,類似c語言寫法
.有變數定義
.有函式定義
.opengl es執行自動呼叫main方法
.用法int ishader = gles20.glcreateshader();
gles20.glshadersource(ishader, source);
gles20.glcompileshader(ishader);
上面就是生成乙個著色器的標準步驟。
4)program
.program就是把頂點和片元著色器鏈結成opengl es能夠識別的**
.用法int iprogram = gles20.glcreateprogram();
gles20.glattachshader(iprogram, ishader);
gles20.gllinkprogram(iprogram);
5)attribute變數訪問
.先在program中找到對應的索引
.然後把資料賦值給對應的索引
.啟用屬性是其對opengl es可見
.用法int location = gles20.glgetvertexattriblocation(iprogram, "vvertexcoor");
gles20.glvertexattribpointer();
gles20.glenablevertexattrib(location);
6)uniform變數訪問
.在著色器中只不可改變
.通過gles20.glgetuniformloaction查詢其在program中的索引
.通過gles20.gluniform***函式為其賦值
7)varying
.一般在頂點著色器中賦值
.然後在後面的管線中使用,比如片元著色器和光柵化
8)繪製三角形
.編寫頂點著色器
.編寫片元著色器
.頂點資料賦值給頂點著色器變數
.顏色值賦值給片元著色器變數
.呼叫gles20.gldrawarrays繪製
.呼叫gles20.glswapbuffers()渲染到螢幕(準確說是到幀緩衝區)
9)繪製影象
.生成紋理物件
.繫結紋理物件
.把影象資料賦值給紋理物件
.把此紋理物件賦值給片元著色器的sampler2d變數
.呼叫gles20.gldrawarrays繪製
.呼叫gles20.glswapbuffers()渲染到螢幕(準確說是到幀緩衝區)
上面總結了opengl es基礎的東西,後面會學習一些稍微高階的知識,比如vbo、fbo、紋理共享、攝像頭渲染到多個su***ce表面、投影以及opengl es中座標系統及其轉換。
OpenGL ES 紋理基礎
位圖 點陣圖是一系列的0和 1,表示開啟或關閉的畫素值 點陣圖中 一塊記憶體中的每個位正好對應於螢幕上的乙個畫素的狀態.它可 以表示掩碼 字型和字元多邊形甚至是兩色的抖 像.畫素圖 與點陣圖相比 畫素圖更有趣 用途更大 畫素圖在記憶體中的布局與點陣圖相似.但是 它的每個畫素可以由超過 1個位的儲存空...
OpenGL ES基本流程總結
作為乙個學習總結,繪製了opengl es中完成一次渲染所需要的一些基本步驟。此處是以離屏渲染為例,離屏渲染是不直接上屏的,而是渲染到緩衝區中,那麼這塊緩衝區就需要我們手動建立,也就是上圖所示的framebuffer。其中需要三個部分來儲存資料,分別是color attachment,depth a...
OpenGL ES 6 響應觸控事件
要響應觸控事件,就需要實現glsu ceview的ontouchevent 方法來監聽觸控事件。設定乙個觸控監聽 下面的 監聽motionevent.action move事件,然後旋轉形狀乙個角度。override public boolean ontouchevent motionevente ...