OpenGL ES 學習難點日誌

2021-07-28 23:40:04 字數 3499 閱讀 5361

對照《opengl es應用開發實踐指南(android卷)》

記錄所犯錯誤

2017-03-16 glsl檔案

在編寫 著色器(.glsl檔案)是一種類似c語言的**

編寫中注意分號(;)

如:

attribute

vec4 a_position;

attribute

vec4 a_color;

varying

vec4 v_color;

void main()

由於缺少「gl_pointsize = 10.0;」中的結尾分號,

編譯沒有問題,

但執行時只有最開始

glclearcolor (float red, float green, float blue, float alpha)

執行時所呈現出來的rgb(red,green,blue)顏色

opengl著色語言(opengl shading language)是用來在opengl中著色程式設計的語言,也即開發人員寫的短小的自定義程式,他們是在圖形卡的gpu (graphic processor unit圖形處理單元)上執行的,代替了固定的渲染管線的一部分,使渲染管線中不同層次具有可程式設計性。比如:檢視轉換、投影轉換等。glsl(gl shading language)的著色器**分成2個部分:vertex shader(頂點著色器)和fragment(片斷著色器),有時還會有geometry shader(幾何著色器)。負責執行頂點著色的是頂點著色器。它可以得到當前opengl 中的狀態,glsl內建變數進行傳遞。glsl其使用c語言作為基礎高階著色語言,避免了使用組合語言或硬體規格語言的複雜性。

頂點著色器主要的工作是:

1. 利用檢視和投影矩陣對點的位置進行變化

2. 如果需要利用法線的時候,也同樣需要利用檢視矩陣對其進行轉換

3. 紋理座標的產生和轉換

4. 頂點的光照或者象素光照的計算

5. 顏色計算

並不是所有的工作都需要做,只需根據自己的需要進行不同的編寫。負責執行頂點著色的是頂點著色器。它可以得到當前opengl中的狀態,glsl內建變數進行傳遞。比如gl_projectionmatrix(投影變換矩)、gl_modelviewmatrix(檢視變換矩陣)、gl_vertex、gl_color、gl_frontcolor、gl_normal等;而這些又是根據opengl應用程式傳遞諸如頂點位置、顏色、法線等資訊。

2017-03-18 別忘了每次都要執行glenablevertexattribarray(int index)

在如下**中:

// 以下**讀取了頂點(vertex)對應的位置

vertexdata.position(0);

glvertexattribpointer(apositionlocation, position_component_count, gl_float, false, stride, vertexdata);

glenablevertexattribarray(apositionlocation);

// 以下**讀取了頂點(vertex)對應的顏色

vertexdata.position(position_component_count);

glvertexattribpointer(acolorlocation, color_component_count, gl_float, false, stride, vertexdata);

glenablevertexattribarray(acolorlocation);

三個函式執行了各執行了兩邊

vertexdata.position(int

index)

vertexdata 為儲存 位置、顏色 資料的資料,position() 的作用就是將讀取位置對應到相應位置

void glvertexattribpointer (int indx, 

int size,

int type,

boolean normalized,

int stride,

buffer ptr)

將著色器(.glsl檔案)中所定義的屬性(attribute)對應起來

glenablevertexattribarray(int

index);

對應完成後,就要將相應效果進行使能操作(enable)

三者是要繫結存在的,需要每次各出現一次!!!

2017-03-19 正交投影

如下矩陣中: ⎡⎣

⎢⎢⎢1

0000

1000

010x

tran

slat

iony

tran

slat

ionz

tran

slat

ion1

⎤⎦⎥⎥

⎥ 某向量做成上述矩陣即可分別 向 x

方向平移 xt

rans

lati

on個單位, 向 y

方向平移 yt

rans

lati

on個單位, 向 z

方向平移 zt

rans

lati

on個單位而對於函式

orthom(float m, int moffset, float left, float right, float bottom, float top, float near, float far)

float m : 目標陣列, 這個陣列的長度至少有16個元素,這樣它才能儲存正交投影矩陣;

int moffset : 結果矩陣起始的偏移值;

float left : x軸的最小範圍;

float right : x軸的最大範圍;

float bottom : y軸的最小範圍;

float top : y軸的最大範圍;

float near : z軸的最小範圍;

float far : z軸的最大範圍。

該函式會產生如下的正交投影矩陣:⎡⎣

⎢⎢⎢⎢

⎢⎢⎢⎢

⎢⎢2r

ight

−lef

t000

02to

p−bo

ttom

0000

−2fa

r−ne

ar0−

righ

t+le

ftri

ght−

left

−top

+bot

tomt

op−b

otto

m−fa

r+ne

a***

r−ne

ar1⎤

⎦⎥⎥⎥

⎥⎥⎥⎥

⎥⎥⎥

opengles學習筆記

glsl語言裡面的attribute和uniform型別的變數,在程式中通過gles20.glgetattriblocation和gles20.glgetuniformlocation獲取,這裡獲取類似取到了他的位址一樣,就像是指標,然後在程式裡面可以通過指標改變這些變數的值,怎麼改變呢?1.通過g...

OpenGL ES學習系列教程

分享乙個opengl es學習系列教程,學opengl es時,這個系列文章不失是乙個好的入口 opengl es for iphone drawing a circle part1 circle part i.html part2 circle part ii.html part3 ircle p...

學習OpenGL ES之ShadowMap 一

我們在了解shadowmap這項技術之前,先來了解一下什麼是陰影。在現實生活中,陰影伴隨著光而生。下面這張圖演示了在平行光下,影子是如何形成的。圖中的兩個物體,在光照方向上,距離光源最近的那些點會被照亮,之後的點則不會接受到光照。所以判斷乙個點是否在陰影中的關鍵就是,它是否是光照方向上距離光源最近的...