高洛德著色

2021-04-20 05:31:44 字數 1419 閱讀 6178

首先,乙個最重要的光照模型lambert,圖在第434頁,r=2(n(點乘)l)n-l,,的是反射光向量,n是法線向量,l是逆光源向量.

另外,可以使用blinn模型來模擬反射光,h=(l+v)/|l+v|.

高洛德著色的過程大概如下:

vs著色器:

vs_output out = (vs_output)0;

float3 l = -lightdir;

//把頂點座標和法線向量變換到攝像機座標系

float4x4 worldview = mul(world, view);

float3 p = mul(float4(pos, 1), (float4x3)worldview);  // position (view space)

float3 n = normalize(mul(norm, (float3x3)worldview)); // normal (view space)

//計算反射光向量

float3 v = -normalize(p);                             // view direction (view space)

float3 r = normalize(2 * dot(n, l) * n - l);          // reflection vector (view space)

// float3 r = normalize(l+v); blinn光照模型         // reflection vector (view space)

//輸出

out.pos  = mul(float4(p, 1), projection);             // position (projected)

//計算漫反射強度時,取max(0,dot(n,l))是因為當l和n的夾角大於90度時,將沒有漫反射光,而只有表示最小亮度的環境光

out.diff = i_a * k_a + i_d * k_d * max(0, dot(n, l)); // diffuse + ambient

//計算反射光時同樣要注意當r和視線v夾角大於90度時反射光強度將為0

//另外要注意鏡面反射光強度為i_s*k_s*pow(cosx,n),x是r與v的夾角,,在這裡因為r,v都是單位向量,因此dot(r,v)=cosx

out.spec = i_s * k_s * pow(max(0, dot(r, v)), n/4);   // specular

out.tex  = tex;                                      

return out;

ps著色器:

float4 ps(

float4 diff : color0,

float4 spec : color1,

float2 tex  : texcoord0) : color

D3D的高洛德著色演算法實現

p為頂點陣列 float max x max max p 0 x,p 1 x p 2 x float max y max max p 0 y,p 1 y p 2 y float min x min min p 0 x,p 1 x p 2 x float min y min min p 0 y,p 1...

高德最新poi各省列表 高德歷史poi各省列表

年份 省 省 poi aoi 資訊點 向量邊界 圍欄 2005 2020 重慶市 500000 poi aoi 資訊點 向量邊界 圍欄 2005 2020 雲南省 530000 poi aoi 資訊點 向量邊界 圍欄 2005 2020 上海市 310000 poi aoi 資訊點 向量邊界 圍欄 ...

牛人高德納 2

第二個成果,就是metafont,這是一套用來設計字型的系統。對於它的價值,一句話就能概括 計算機界最懂字型的兩個人,乙個是蘋果的賈伯斯,另乙個就是高德納。第三個成果,就是文學化程式設計 literate programming 它把程式設計的藝術性展示得淋漓盡致。高德納說,一段好的程式,不僅僅是要...