最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

著色器

2023-07-24 16:20 作者:追逐彗星的尾巴  | 我要投稿

在OpenGL中,我們需要至少定義一個(gè)頂點(diǎn)著色器和一個(gè)片段著色器。

頂點(diǎn)著色器

下面是一個(gè)最基礎(chǔ)的頂點(diǎn)著色器的寫法:

每個(gè)著色器都起始于一個(gè)版本聲明。

in關(guān)鍵字用來(lái)聲明輸入變量,即著色器接收從應(yīng)用程序傳遞過(guò)來(lái)的數(shù)據(jù),這些數(shù)據(jù)通常是頂點(diǎn)屬性,例如頂點(diǎn)位置、法線、紋理坐標(biāo)等。

layout關(guān)鍵字配合location限定符,用于指定變量在內(nèi)存中的布局或者在著色器中的位置。

vec是GLSL中的向量數(shù)據(jù)類型,其中vec2表示包含兩個(gè)分量的二維向量,vec3表示包含三個(gè)分量的三維向量,vec4表示包含四個(gè)分量的四維向量。

在上面的代碼中,我們輸入了一個(gè)vec3類型的變量position,它包含了頂點(diǎn)的坐標(biāo)信息,之后我們?cè)谥骱瘮?shù)中將其轉(zhuǎn)換為GLSL內(nèi)置的輸出變量gl_Position

gl_Position是一個(gè)四維向量(x,y,z,w),表示變換后的頂點(diǎn)位置,其中(x,y,z)表示變換后的頂點(diǎn)坐標(biāo),而w用于透視除法。透視除法是將齊次坐標(biāo)(Homogeneous Coordinates)轉(zhuǎn)換為三維坐標(biāo)的過(guò)程。

——————————————————————————————————————

齊次坐標(biāo)是一種將N維空間中的點(diǎn)表示為N+1維向量的方法。在三維空間中,齊次坐標(biāo)通常用四維向量表示。一個(gè)點(diǎn)的三維坐標(biāo)(x, y, z)可以表示為(x', y', z', w),其中:

x' = x * w,y' = y * w,z' = z * w

這里的w是齊次坐標(biāo)的第四個(gè)分量,通常稱為“權(quán)重”。通過(guò)引入權(quán)重,我們可以使用除法來(lái)實(shí)現(xiàn)透視效果。透視除法是將齊次坐標(biāo)轉(zhuǎn)換為三維坐標(biāo)的過(guò)程,即(x/w, y/w, z/w)。

齊次坐標(biāo)有一些有用的性質(zhì),例如平移、旋轉(zhuǎn)和縮放變換可以統(tǒng)一地表示為矩陣乘法。這極大地方便了圖形渲染中的變換操作。

——————————————————————————————————————

片段著色器

片段著色器所做的是計(jì)算像素最后的顏色輸出。

顏色是一個(gè)四維向量,它的四個(gè)分量分別是紅、綠、藍(lán)和透明度,一般縮寫為RGBA,其中每個(gè)分量的強(qiáng)度都設(shè)置在0.0到1.0之間。

下面是一個(gè)最基礎(chǔ)的片段著色器的寫法:

編譯著色器

編譯一個(gè)著色器需要三個(gè)步驟:創(chuàng)建著色器—綁定源碼—編譯著色器。

glCreateShader()用于創(chuàng)建一個(gè)著色器對(duì)象,并返回一個(gè)標(biāo)識(shí)符。

glShaderSource()用于將著色器源代碼與著色器對(duì)象進(jìn)行關(guān)聯(lián)。

shader是要關(guān)聯(lián)源代碼的著色器對(duì)象的標(biāo)識(shí)符。

count是源代碼字符串?dāng)?shù)組的大小,即源代碼的行數(shù)。

string是指向源代碼字符串?dāng)?shù)組的指針,可以是一個(gè)或多個(gè)源代碼字符串。

length是指向一個(gè)整數(shù)數(shù)組的指針,用于指定每個(gè)源代碼字符串的長(zhǎng)度,如果為 NULL,則表示每個(gè)字符串都以 NULL 結(jié)尾。

glCompileShader()用于編譯著色器。

著色器程序

著色器程序?qū)ο?Shader Program Object)是多個(gè)著色器合并之后并最終鏈接完成的版本。使用一個(gè)著色器程序有以下幾個(gè)步驟:創(chuàng)建著色器程序—添加著色器—鏈接著色器—激活著色器程序。

glCreateProgram()用于創(chuàng)建著色器程序?qū)ο?,并返回?duì)象的標(biāo)識(shí)符。

glAttachShader()用于把之前編譯過(guò)的著色器附加到程序?qū)ο笊稀?/span>

glLinkProgram()把相關(guān)的著色器鏈接到程序?qū)ο?,組合為一個(gè)可執(zhí)行程序。

glUseProgram()用于激活著色器程序?qū)ο蟆?/p>

此外,在把著色器對(duì)象鏈接到程序?qū)ο笠院?,著色器?duì)象就失去了用處。記得刪除著色器對(duì)象,釋放資源。


著色器的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
鄂州市| 屏东县| 来凤县| 台南县| 遵化市| 健康| 宝丰县| 金寨县| 宽城| 安徽省| 松滋市| 兴山县| 灵台县| 海门市| 通化市| 大悟县| 富川| 盐津县| 石狮市| 义马市| 炉霍县| 综艺| 常德市| 苏尼特左旗| 绍兴市| 咸宁市| 樟树市| 吉木乃县| 连南| 天气| 高尔夫| 德钦县| 衡阳县| 天气| 将乐县| 商河县| 渑池县| 嘉荫县| 盐城市| 宿迁市| 新河县|