Godot Shader筆記:著色器語言(二)

原文地址:Docs ? Shading ? Shading reference ? Shading language

類型轉換(Casting)

和GLSL ES 3.0一樣,無論是標量(Scalar)還是向量(Vector),即使維度(size)相同,但如果類型不同,也是無法進行隱式(implicit)類型轉換离咐。如果連維度都不同椭懊,則更加不能夠隱式轉換贬丛。所有的類型轉換必須是顯式(explicit)的且基于構造函數(shù)來實現(xiàn)右冻。

例子

float a = 2; // 非法
float a = 2.0; // 合法
float a = float(2); // 合法

默認的整型是有符號的,因此要賦值給無符號整型也需要進行類型轉換

int a = 2; // 合法
uint a = 2; // 非法
uint a = uint(2); // 合法
成員變量(Members)

向量中的分量值可以使用“x”, “y”, “z” 或者“w”來訪問捡偏,同時也可已使用“r”, “g”, “b” 和“a”來訪問,二者是等效的峡迷。哪一個更加直觀方便就可以使用哪一個霹琼。

對于矩陣(matrices),可以使用m[row][colum]的形式訪問其每一個元素,或者以m[idx]的形式使用行索引(row index)訪問一個行向量凉当。例如訪問一個mat4(4x4的矩陣)中的位置y,我們可以這樣做m[3][1]枣申。

構造(Constructing)

構造向量類型可以按照如下例子傳參數(shù):

// 傳遞所需數(shù)量的分量參數(shù)
vec4 a = vec4(0.0, 1.0, 2.0, 3.0);
// 傳遞互補的 向量 及/或 標量
vec4 a = vec4(vec2(0.0, 1.0), vec2(2.0, 3.0));
vec4 a = vec4(vec3(0.0, 1.0, 2.0), 3.0);
// 也可以為整個向量傳一個值
vec4 a = vec4(0.0);

構造矩陣要求向量的維度和矩陣維精度(Precision)度相同,當然你也可以使用matx(float)的形式構造一個對角矩陣(diagonal matrix),例如mat4(1.0)代表一個4維單位矩陣(identity matrix)

mat2 m2 = mat2(vec2(1.0, 0.0), vec2(0.0, 1.0));
mat3 m3 = mat3(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0));
mat4 identity = mat4(1.0);

矩陣可以由不同維度的矩陣創(chuàng)建看杭,但是要注意兩個原則:

  1. 如果用一個小維度矩陣創(chuàng)建一個大維度矩陣忠藤,那么剩余的部分,將由大維度矩陣的單位矩陣相對應值填充

  2. 如果用一個大維度矩陣創(chuàng)建一個小維度矩陣楼雹,那么將截取大維度矩陣左上角的子矩陣

mat3 basis = mat3(WORLD_MATRIX);
mat4 m4 = mat4(basis);
mat2 m2 = mat2(m4);
混寫(Swizzling)

(注:Swizzling直譯是旋轉模孩,在此處的意譯取網上的一種翻譯"混寫")

混寫是指可以獲取向量分量任意順序組合尖阔,只要(組合的)結果依然是向量或者標量,舉個例子更好理解:

vec4 a = vec4(0.0, 1.0, 2.0, 3.0);
vec3 b = a.rgb; // 用vec4的分量“混寫”構造一個vec3
vec3 b = a.ggg; // 依然合法; 用vec4的單一分量“混寫”構造一個vec3
vec3 b = a.bgr; // 分量的順序是無關緊要的
vec3 b = a.xyz; // 用xyzw依然等效
float c = b.w; // 非法, 因為作為vec3的b中不包含"w"分量.
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末榨咐,一起剝皮案震驚了整個濱河市介却,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌块茁,老刑警劉巖齿坷,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異数焊,居然都是意外死亡永淌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門佩耳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來遂蛀,“玉大人,你說我怎么就攤上這事干厚±畹危” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵蛮瞄,是天一觀的道長悬嗓。 經常有香客問我,道長裕坊,這世上最難降的妖魔是什么包竹? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮籍凝,結果婚禮上周瞎,老公的妹妹穿的比我還像新娘。我一直安慰自己饵蒂,他們只是感情好声诸,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著退盯,像睡著了一般彼乌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渊迁,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天慰照,我揣著相機與錄音,去河邊找鬼琉朽。 笑死毒租,一個胖子當著我的面吹牛,可吹牛的內容都是我干的箱叁。 我是一名探鬼主播墅垮,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼惕医,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了算色?” 一聲冷哼從身側響起抬伺,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎灾梦,沒想到半個月后峡钓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡斥废,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了给郊。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片牡肉。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖淆九,靈堂內的尸體忽然破棺而出统锤,到底是詐尸還是另有隱情,我是刑警寧澤炭庙,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布饲窿,位于F島的核電站,受9級特大地震影響焕蹄,放射性物質發(fā)生泄漏逾雄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一腻脏、第九天 我趴在偏房一處隱蔽的房頂上張望鸦泳。 院中可真熱鬧,春花似錦永品、人聲如沸做鹰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钾麸。三九已至,卻和暖如春炕桨,著一層夾襖步出監(jiān)牢的瞬間饭尝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工献宫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留芋肠,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓遵蚜,卻偏偏與公主長得像帖池,于是被迫代替她去往敵國和親奈惑。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355