暫時找不到合適繪製多邊形的演算法,就自己豐衣足食,不當之處希望大家指出。
首先繪製凸四邊形,畢竟這個渲染器我最低的要求就是能畫個正方體
演算法設計:多邊形是由多個三角形組合而成。希望通過輸入四個頂點繪製多邊形,但不能隨意指定頂點繪製多邊形,否則就是這樣
所以我們需要找到不相鄰的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...