(6)Opengl ES基礎總結

2021-09-05 00:26:27 字數 2042 閱讀 3487

經過前面章節學習,我們對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 ...