OpenGL筆記(一) Tips


一、一些概念:

GLTools: 一些有用且可復用的函數

GLEW: OpenGL API的一些擴展機制

GLUT: OpenGL Utility toolkit, OpenGL跨平台相關,隱藏平台相關細節

RC代表渲染環境(Rendering Context),是運行中的OpenGL狀態機句柄

固定渲染模式限制了開發者的自由,目前一般都是采用核心模式(Core-profile)

跨距Stride

可以用2個數組分別描述位置和顏色信息,這樣必須保證兩個數組中頂點的位置和顏色是否一一對應。

除了這種方式,還可以選擇一個數組存儲兩種信息的方式:“頂點1位置+頂點1顏色+頂點2位置+頂點2顏色+”,這樣就引出了跨距的概念,即一個頂點和顏色占用的空間個數之和。

OpenGL的操作方式

由跨距可以看出,OpenGL操作時,一般都是將所需的數據准備好,然后調用glDrawElements函數一次繪制完成,而不是通過某個函數一個頂點一個頂點的去渲染,這是OpenGL渲染的一個特點。

二、開發重點

1. 頂點着色器

每個頂點執行一次,比如我們繪制一個線段,包含了2個頂點,那就是執行2次頂點着色器。我們傳遞給頂點着色器的數據不僅包含了每個頂點的位置,也包含顏色

2. 片段着色器

3. 將數據傳遞給着色器

頂點和片段着色器用於描述如何繪制圖形圖像的環節;

GLSL:OpenGL編寫着色器具體實現的編程語言;

三、歸一化坐標

頂點的歸一化坐標是[-1,1];

紋理的歸一化坐標是[0,1],兩位維度分別是S、T,一般稱為ST紋理坐標或UV坐標;如果設置的紋理坐標小於1,意思是將紋理的一小部分貼到頂點坐標中去;大於1,紋理邊界將會拉伸。

紋理坐標方向性在Android上與我們平時熟悉的Bitmap、Canvas等一致,都是頂點在左上角。

四、紋理

1. 紋理:在OpenGL中簡單理解就是一張圖片

2. 紋理ID:紋理的直接引用

3. 紋理單元:紋理的操作容器,有GL_TEXTURE0、GL_TEXTURE1、GL_TEXTURE2等,紋理單元的數量是有限的,最多16個。所以最多只能同時操作16個紋理。在切換使用紋理單元的使用,使用glActiveTexture方法。

4. 紋理目標:一個紋理單元中包含了多個類型的紋理目標,有GL_TEXTURE_1D,GL_TEXTURE_2D等

5. 紋理ID與紋理單元的關系

OpenGL要操作一個紋理,那么是將紋理ID裝進紋理單元這個容器里,然后再通過操作紋理單元的方式去實現。

OpenGL的大部分紋理一般都只接受RGBA類型的數據,如果不是RGBA,比如YUV420P格式,可以在顯卡中進行轉換。

五、glDrawArrays頂點法和glDrawElements索引法的繪制區別

 1. glDrawArrays只能是依次輸入所繪制的每個三角形的每個數據,而glDrawElements需要輸入每個定點(無需重復),外加一個繪制時的索引數組。

glDrawArrays傳輸或指定的數據是最終的真實數據,在繪制時效能更好;

glDrawElements指定的是真實數據的調用索引,在內存/顯存占用上更節省;

glDrawArrays的數據空間損耗在頂點定義處;glDrawElements的數據空間損耗在頂點索引的定義處;

2. 適用情況

如果頂點復用情況較少,可以采用glDrawArrays;如果頂點復用情況多,畫的圖形較多,而且大不相同的時候,優先采用glDrawElements。

頂點法內存計算方式:頂點數 * 頂點屬性數 * 頂點數據格式類型;

索引法內存計算方式:頂點數 * 頂點屬性數 * 頂點數據格式類型 + 索引數 * 索引數據格式類型

3. 輸入坐標時一定要輸入完整,比如帶.0f

4. draw mode

比較關鍵的一個參數,2D繪制一般采用GL_TRIANGLE_STRIP或GL_TRIANGLE_FAN。

GL_TRIANGLE_STRIP:相鄰3個點構成一個三角形,不包括首位兩個點,例如ABC、BCD、CDE、DEF

GL_TRIANGLE_FAN:第一個點和之后所有相鄰的2個點構成一個三角形,例如ABC、ACD、ADE、AEF

六、紋理

1. 環繞方式

GL_CLAMP_TO_EDGE:紋理坐標會被約束在0到1之間,超出的部分會重復紋理坐標的邊緣,產生一種邊緣被拉伸的效果

GL_REPEAT:對紋理的默認行為。重復紋理圖像。

2. 紋理過濾

GL_NEAREST鄰近過濾,是OpenGL默認的紋理過濾方式。當設置為GL_NEAREST的時候,OpenGL會選擇中心點最接近紋理坐標的那個像素。

GL_LINEAR線性過濾,它會基於紋理坐標附近的紋理像素,計算出一個插值,近似出這些紋理像素之間的顏色。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM