對照《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語言作為基礎高階著色語言,避免了使用組合語言或硬體規格語言的複雜性。2017-03-18 別忘了每次都要執行glenablevertexattribarray(int index)頂點著色器主要的工作是:
1. 利用檢視和投影矩陣對點的位置進行變化
2. 如果需要利用法線的時候,也同樣需要利用檢視矩陣對其進行轉換
3. 紋理座標的產生和轉換
4. 頂點的光照或者象素光照的計算
5. 顏色計算
並不是所有的工作都需要做,只需根據自己的需要進行不同的編寫。負責執行頂點著色的是頂點著色器。它可以得到當前opengl中的狀態,glsl內建變數進行傳遞。比如gl_projectionmatrix(投影變換矩)、gl_modelviewmatrix(檢視變換矩陣)、gl_vertex、gl_color、gl_frontcolor、gl_normal等;而這些又是根據opengl應用程式傳遞諸如頂點位置、顏色、法線等資訊。
在如下**中:
// 以下**讀取了頂點(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這項技術之前,先來了解一下什麼是陰影。在現實生活中,陰影伴隨著光而生。下面這張圖演示了在平行光下,影子是如何形成的。圖中的兩個物體,在光照方向上,距離光源最近的那些點會被照亮,之後的點則不會接受到光照。所以判斷乙個點是否在陰影中的關鍵就是,它是否是光照方向上距離光源最近的...