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解二元一次方程的uv值即可得到每個點對於p點的顏色貢獻值。p.y = (1 - u - v) * p1.y + u * p2.y + v * p3.y
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 頂點結構體定義好之後,需要用靈活頂點格式標記的組...