光柵渲染器(四)多邊形繪製

2021-08-09 23:28:48 字數 1272 閱讀 1291

暫時找不到合適繪製多邊形的演算法,就自己豐衣足食,不當之處希望大家指出。

首先繪製凸四邊形,畢竟這個渲染器我最低的要求就是能畫個正方體

演算法設計:多邊形是由多個三角形組合而成。希望通過輸入四個頂點繪製多邊形,但不能隨意指定頂點繪製多邊形,否則就是這樣

所以我們需要找到不相鄰的2個點,通過這2個點,分別跟另外2個點完成2個三角形的繪製,這樣就構成了乙個多邊形

演算法實現如下

通過頂點之間的距離確定不相鄰的2個頂點

void drawquadrilateral(point_t v1, point_t v2, point_t v3, point_t v4, color_t c)//繪製凸四邊形

但這樣繪製其他多邊形就很不難,不可能為每一種多邊形設計演算法,所以有了接下來的演算法

演算法設計:由上圖可以發現任何乙個多邊形都可以以三角形組成,只要按順序給定關於頂點的資料,我們就可以輕鬆繪製多邊形

首先是給定按順序的頂點資料

vector

vertices = ;

接下來是判斷頂點的資料是否可以完成多邊形

int

size = vertices.size();

if (size % 2 != 0||size

<6) return;//目前只是2d

接下來就是繪製多邊形

void drawpolygon(vector

vertices, color_t c)//按順序輸入複雜多邊形頂點,繪製多邊形

}

成功了

Opencv繪製多邊形

利用opencv繪製多邊形,主要是因為給的資料是4個點,而繪製矩形的函式cv2.rectangle只傳遞兩個點,即左上和右下。繪製矩形框可以參考這裡 就是利用cv2.fillpoly函式 cv2.fillpoly img,area1,area2,area3 2,255,255 image表示處理的 ...

軟體光柵化渲染器 六

加入了透視矯正,畫素的覆蓋遵循了左上的原則。對1 z進行插值,將結果在除以1 z得到正確的插值。透視矯正紋理 void fillbottom bytexcorrect const t else if t.vertex 1 newpos y t.vertex 2 newpos y else if le...

軟體光柵化渲染器 十

環境光,一般場景中只有乙個環境光源 環境光 class light 定向光源,方向一定,並且光不會衰減 方向光源 class directionlight public light 計算鏡面高光 l direction double x l.x 2 vectordot l,vertex.normal...