OpenGL ES 著色器指令碼

2021-06-03 00:40:12 字數 2347 閱讀 4911

static char* vshaderstr =          

"attribute vec4 a_position; \n"

"attribute vec4 a_color; \n"

"varying vec4 v_color; \n"

"void main() \n"

" \n";

static char* fshaderstr =

"#ifdef gl_es \n"

"precision highp float; \n"

"#endif \n"

" \n"

"varying vec4 v_color; \n"

" \n"

"void main (void) \n"

"";

●每個著色器有乙個main()方法,就像乙個典型的c程式。針對每個頂點(頂點著色器中)或每個片段/畫素(片段著色器中)執行**。

●無論什麼程式轉換/效果,每個頂點的最終位置靠分配座標至gl_position進行設定;另一方面,每個畫素的最終顏色通過指定顏色至gl_fragcolor進行設定。

●屬性是變數,我們可以將其繫結到我們的外部c + +**。因為頂點著色器是管線中的第乙個元件,我們傳遞屬性至位置和顏色,並讓其通過內部變數(改變v_color)傳遞顏色屬性至片段著色器。

●位置和顏色屬性(a_position和a_color)是乙個有4個座標(x,y,z,w,用於確定位置)和 (r,g,b,a,用於確定顏色) 的向量格式。

●在我們的例子中,我們對最終的頂點位置和畫素顏色不作修改,所以我們需要做的是直接分配屬性至gl_position(或使用傳遞的改變v_color 傳遞至gl_fragcolor)

●如果您直接將著色器的源**插入您的c + +**,不要忘了換行符「\ n」

現在,我們需要兩個區域性變數,讓他們連線到我們的著色器:乙個用於確定位置,乙個用於確定顏色。

attposition = glgetattriblocation(__programobject, "a_position");    

attcolor = glgetattriblocation(__programobject, "a_color");

my3d::ondraw(void)

; glfloat vcolors = ;

glvertexattribpointer(attposition, 3, gl_float, gl_false, 0, vvertices); glvertexattribpointer(attcolor, 4, gl_float, gl_false, 0, vcolors); glenablevertexattribarray(attposition);

glenablevertexattribarray(attcolor);

gldrawarrays(gl_********s, 0, 3);

commit();

return r;

}

●首先,我們設定了視口並將背景調為漆黑色

●其次,我們定義了三個頂點作為我們的三角形的三個角及三種顏色,其將用於每個頂點。

●然後,我們基本上是將我們的位置和顏色(attposition和attcolor)成員變數「指」向這些陣列。我們指定向量是否由三個方面(如為頂點的情況下)或四個方面(在我們的顏色的情況下,包括alphas)組成。你可以使用額外的引數,但他們是在我們的範圍之外。

●此外,我們啟用我們的著色器屬性成員變數 - 因此在opengl es圖形管線中儲存兩個陣列。

●最後,我們使用這一點上儲存在圖形管線中的陣列來要求opengl es繪製三角形。並將渲染傳遞至螢幕。

完成!片段著色器修改

為了好玩,讓我們稍微修改畫素著色器,所以,修改在該行的片段著色器的源:

gl_fragcolor = v_color;

to this

gl_fragcolor = v_color * vec4(0.5, 0.5, 0.5, 1.0);

您可能已經猜到,這一修改將使整體渲染形象顏色加深約50%!讓我們來看看是否您可以找到不同之處:

OpenGL ES 著色器 片斷著色器詳解

opengl es 入門 01 opengl es 入門 02 opengl es 入門 03 opengl es 入門 04 opengl es 入門 05 opengl es 入門練習 01 opengl es 入門練習 02 opengl es 入門練習 03 opengl es 入門練習 0...

著色器(Shader)之畫素著色器

畫素著色器實際上就是對每乙個畫素進行光柵化的處理期間,在gpu上運算的一段程式。不同與頂點著色器,畫素著色器不會以軟體的形式來模擬畫素著色器。畫素著色器實質上是取代了固定功能流水線中多重紋理的環節,而且賦予了我們訪問單個畫素以及訪問每乙個畫素紋理座標的能力 多重紋理就是我們同時啟用多層紋理,然後規定...

頂點著色器 片段著色器

一 著色器 著色器只是一種把輸入轉化為輸出的程式。著色器也是一種非常獨立的程式,因為它們之間不能相互通訊 它們之間唯一的溝通只有通過輸入和輸出。在最簡配置下,至少都得有兩個著色器 乙個叫頂點著色器 vertex shader 它將作用於每個頂點上 另乙個叫片段著色器 fragment shader ...