shader language:
訪問vector某個分量,必須用常量,不能用乙個表示式。
matrix 和vector都是用列來描述。
訪問array某個下標,只能用常數。不能再定義的時候初始化,不能定義為常量陣列,必須乙個個陣列元素的初始化。
函式不能迭代。有些gpu沒有stack和flow的control,shader函式是inline。
uniform是從api層傳下來的唯讀的變數。
uniform存在constant buf中,varying存在interpolators中。需要packing。規則是讓產生**的複雜度保持常量。即不需要進行重排使得編譯器產生額外的**來融合unpack 的data。
precision qualifier:只有es才有,desktop沒有。保持速度和電量。vs預設為high精度,ps必須要指定精度。
invariance: es引入。因為compiler會優化shader導致指令重排。指令重排的結果就是相同的輸入不一定有相同的結果。case:multipass shader effect.將乙個物體使用alpha blending畫在他自己的上面。通常叫做z fighting。z精度的不同導致結果不一樣。比如先乙個vs+fs(fs處理光照)再乙個相同vs+fs(fs處理環境光和散射光)結果會不同。使用invarient可以保證相同的操作得出相同的結果。
vertex attributes, arrays and buffer object
設定const attribute只能用float型,因為const attribute用的少,而且內部基本都要轉化成為single-presicion float point
在vs裡面宣告vertex attribute: attribute不會像uniform和varying一樣被pack。每個通道都被儲存為32bit single precision floating point. 宣告為attribut的在vs裡面是作為唯讀的。
pa
座標系的轉換 xo 物體local 座標 —–經過vs—-》xc 裁剪座標 —-經過透視除法—-–》xd正交化裝置座標 —-經過視口變換—-》xw視窗座標。
需要透視除法是先將世界空間的座標歸一化,然後再變換到適合視窗螢幕的座標。
rasteration:硬體上不做culling,culling在pa階段就做好了。不過es標準裡面 culling在raster時候做。
vs
mvp矩陣,光照,紋理座標,vertex skinning。
built-in變數: gl_position作為裁剪座標系裡面的值,後面用來作為裁剪(注意,還沒有被裁剪!!)和視口轉換。
texture
active texture -> bind texture -> set uniform sampler by gluniform
當紋理的長寬不是2的n次方的時候,wrap的方式有限制。必須是clamp_to_edge。min filter必須是nearest 或者linear。有個extension可以取消這個限制,wrap可以是repeat或者mirrored-repeat。min fliter也可以隨便。
fs
必須制定precision qualifier。
fbo
為什麼要有fbo:
1 畫texture需要使用window system提供的buffer,然後copy到texture的mem。效率低而且copy的大小有限。
2 用pbuffer來作為texture的話,由於window system提供的su***ce必須和window system提供的context繫結起來,在某些case下,需要將pbuffer和on screen的window單獨繫結到各自的context。比如乙個window 已經和乙個context繫結了,再繫結乙個pbuffer就不允許了。
3 在window system提供的drawable之間切換需要finish之前的drawable。浪費。
OpenGL ES2 0裡的3種變數
看過一遍opengl es 2.0 的書後,對shader 裡面的三種變數還是有時搞不清楚區別。特此留文。opengl es2.0的shader裡面宣告的變數一般有三種型別uniform,attribute,varying。如果uniform變數在vertex和fragment兩者之間宣告方式完全一...
學習OpenGL ES 的一些資料
1 學習 官方 http www.khronos.org opengles 最經典的nehe 學習 http nehe.gamedev.net 中文的nehe 學習 http www.owlei.com dancingwind 2 學習書籍 官方出的 opengl 程式設計指南 也稱紅寶書,最經典的...
OpenGL ES 2 0 頂點著色器的妙用
基本原理 繪製一幀畫面時由頂點著色器根據一定的規則變換各個頂點的位置,即可得到旗幟迎風飄揚的效果。為了使旗幟的飄動過程比較平滑,採用基於正弦曲線的頂點位置變換規則。計算方法 傳入頂點著色器的原始頂點的z座標都是相同的 本案例為0 經過頂點著色器變換後頂點的z座標是根據正弦曲線分布的 首先計算出當前處...