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

2021-08-20 04:48:51 字數 1206 閱讀 3423

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].y), p[2].y);

這樣就確定了外接矩形,接著就可以判斷矩形內的每乙個點是否在三角形內,然後對顏色就行平均就可以確定每個點的顏色了。

由wiki的

重心座標公式,

因為 λ123之和為1 所以三元一次方程可以簡化為 二元一次方程

p.x = (1 - u - v) * p1.x + u * p2.x + v * p3.x

p.y = (1 - u - v) * p1.y + u * p2.y + v * p3.y

解二元一次方程的uv值即可得到每個點對於p點的顏色貢獻值。

auto getuv = (std3dvertex p[3],point pp, double& u, double& v) ;
繪製部分比較簡單

遍歷每個值 判斷 u + v 是否大於1即可判斷點的內外

不多說 直接上**

for (float i = min_y; i < max_y; i++) , u, v);

const

auto ep = 0.000001;

if (u + v > 1)

continue;

else );}}

}

顏色乘法**

inline

int d3dcolor_a(d3dcolor a) inline

int d3dcolor_r(d3dcolor a) inline

int d3dcolor_g(d3dcolor a) inline

int d3dcolor_b(d3dcolor a)

auto colormul = ( float mul, d3dcolor col) -> d3dcolor ;

最終實現結果:

忽略掉中間的漸變色帶……

D3D的動作融合

d3d的動作融合 當遊戲主角由走路變為跑步時,如果生硬的切換動作。會不真實。最常見的辦法是將走路與跑步的動作進行插值融合。今天做了一下這部分的工作。效果還不錯。原理就是 d3dxmatrix tlerpmatrix tlerpmatrix 1 vactionlerp tbonematrix vact...

D3D的矩陣變換

物體座標 世界座標 視座標 投影座標 螢幕座標 這部分的說明已經不能再多了,但是有些細節其實d3d的文件中也比較難發現出來,還有些在文件中的解釋可能會讓人比較迷惑。1。視矩陣是什麼?參見 d3d的視矩陣是如何構造的 2。投影矩陣把z投影到 去了?我們在3d圖形學中學的投影矩陣是給出乙個平面,將3d空...

D3D中的渲染

虛擬世界中渲染幾何體一般來說有三種途徑 自定義座標渲染 d3dx內建模型渲染和外部模型資料渲染。第一步 定義頂點資料結構體 d3d提供了自定義頂點結構的機制,通過自定乙個結構體,來儲存我們所希望具有的頂點資料,例如 stuct colorvertex 頂點結構體定義好之後,需要用靈活頂點格式標記的組...