3 開始編寫

2021-10-24 11:07:58 字數 2398 閱讀 2943

// upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'

// upgrade note: replaced 'mul(unity_matrix_mvp,*)' with 'unityobjecttoclippos(*)'

shader "gamenose"

// 第一行定義了shader的名字 shader "gamenose

fixed4 frag()

: sv_target

endcg //表面著色器結束}}

}

注意: properties 的語義不是必須的,也可以選擇不宣告

由cgprogram 和 endcg 所包圍的cg**片段:#pragma /p』ræɡmə/注釋 vertex vert

#pragma fragment frag 告訴u3d哪個函式包含了頂點著色器的**,哪個包含的是片元著色器的**,其標準格式是:#pragma vertex/fragment 函式名

關於float4資料型別

gpu是以四維向量為基本單位來計算的。4個浮點數所組成的float4向量是gpu內建的最基本型別。使用gpu對兩個float4向量進行計算,與cpu對兩個整數或兩個浮點數進行計算一樣簡單,都是只需要乙個指令就可以完成。

hlsh的基本資料型別定義了float、int和bool等非向量型別,但是它們實際上都會被complier轉換成float4的向量,只要把float4向量的其中3個數值忽略,就可以把float4型別作為標量使用。

使用貼圖座標時,只需要二維向量,hlsl定義了float2型別作為二維向量使用。

shader經常會用到矩陣,hlsl有乙個內建型別float4x4,它可以用來表示乙個44矩陣。float4x4並不是gpu的內建型別,float4x4實際上是由4個float4所組成的陣列。其他的還有float3x3、float2x2,分表代表33矩陣、22矩陣。

shader也可以宣告陣列,44矩陣實際上就是乙個float4 m[4]的陣列。注意,shader中的所有的變數都使用暫存器,沒有其他記憶體空間可以使用,所以越大的陣列會占用越多的暫存器,甚至會超出暫存器的數量限制。

在使用float4向量中的個別數值時,可以用xyzw或rgba,都可以用來表示四維向量中的數值。但不能把它們混用,例如不能用xyba,把它視為顏色時就用rgba,否則就是用xyzw,不能把這二者混合使用。

1、float fixed

float : 常見的寫法有 float4 和 float3

float3 : 一般情況下我們指的是向量,例如 :float3 normal :normal

float4 : 對那些需要操作的頂點用 float4 來表示 ,例如 : float4 vertex : position

那麼我們為什麼用 float4 來表示我們想要的頂點呢?

在unity內部,通過矩陣的方式來描述這些點,一般情況下我們覺得 3*3的矩陣就能夠描述乙個點了,但是這樣的點是沒有辦法進行變換的 : 旋轉、縮放還有平移。

因此我們需要擴散到乙個齊次座標空間

因此對於點的變化我們用 float4 來表示

還有一種理解方式:鏈結內容

1、點,用vector4表示就是(x,y,z,1)。*

2、向量,用vector4表示就是(x,y,z,0)。

那麼,向量是兩個點相減組成,得到:

(x1,y1,z1,1)- (x2,y2,z2,1) = (x1 - x2, y1 - y2,z1 - z2,0)

就可以表示兩個點相減是乙個向量。

如果用vector3表示乙個點的話,就不知道兩個點相減是什麼了。

然後我們再來看看 shaderlab屬性型別和cg變數型別的匹配關係

這樣就能理解為什麼使用 float4 型別了。

return unityobjecttoclippos(v); 把頂點座標從模型空間轉換到剪裁空間;

5.24使用屬性

@[toc](5.4 cg/hlsl) 語義:

語義是 乙個賦給shader輸入和輸出的字串,就是告訴shader從**讀資料,把資料輸出到**

AT T彙編 寫在開始之前

不知不覺,大三就快結束了,所學的計算機相關知識也基本可以說是教完了,該畢業了,所以,打算對自己所學的比較深入的和感興趣的知識進行一場回籠。也當作是大學的回憶吧。計畫寫的內容在 1.組合語言 2.c c 語言 3.linux c程式設計 4.linux 網路程式設計 5.stl原始碼閱讀 6.ngin...

3 從例項開始

3 php實踐 php的許多特點與其他軟體或者工具有關。利用迄今為止我們所學到的php知識,我們可以試著建立乙個簡單互動的 利用這一過程我們又可以學到不少東西。好吧,我們現在開始專注於乙個典型個人 的建設。3.1 計畫乙個站點 一般乙個個人站點包括乙個歡迎頁面 乙個留言本頁面 乙個書籤鏈結頁面 乙個...

從零開始編寫SAT求解器(一)

背景知識 sat問題 sat問題是布林可滿足性問題 又名命題可滿足性問題 的縮寫,即給定乙個布林公式,判斷是否存在滿足它的解釋的問題。sat問題是第乙個被證明的np問題。這裡,我把問題簡化為 輸入乙個析取正規化 cnf 輸出乙個布林值表示它是否是可滿足的,若它是可滿足的,再輸出乙個使它為真的解釋。d...