[英]Knowing if middle vertex is left or right when sorting a triangle vertices by Y?
我正在閱讀Chris Hecker的“紋理貼圖”文章 ,對於我一生,我無法理解他是如何使用Y階頂點確定中間頂點是在左側還是在右側。
排序代碼:
if (Y0 < Y1)
{
if (Y2 < Y0)
{
Top = 2; Middle = 0; Bottom = 1;
MiddleCompare = 0; BottomCompare = 1;
}
else
{
Top = 0;
if (Y1 < Y2)
{
Middle = 1; Bottom = 2;
MiddleCompare = 1; BottomCompare = 2;
}
else
{
Middle = 2; Bottom = 1;
MiddleCompare = 2; BottomCompare = 1;
}
}
}
else
{
if (Y2 < Y1)
{
Top = 2; Middle = 1; Bottom = 0;
MiddleCompare = 1; BottomCompare = 0;
}
else
{
Top = 1;
if (Y0 < Y2)
{
Middle = 0; Bottom = 2;
MiddleCompare = 3; BottomCompare = 2;
}
else
{
Middle = 2; Bottom = 0;
MiddleCompare = 2; BottomCompare = 3;
}
}
}
然后他寫道:
if (BottomCompare > MiddleCompare)
{
MiddleIsLeft = 0;
Left = &TopToBottom; Right = &TopToMiddle;
}
else
{
MiddleIsLeft = 1;
Left = &TopToMiddle; Right = &TopToBottom;
}
我的問題:
BottomCompare
和MiddleCompare
變量以實現比較。 在比較的前半部分(“ if”), MiddleCompare
等於Middle
而BottomCompare
等於Bottom
。 但是在下半部分(“ else”)中,當Bottom
等於0
時BottomCompare
等於3
,而當Middle
等於0
時MiddleCompare
等於3
。 這是為什么? 您缺少的是:
多邊形纏繞規則。
三角形/多邊形的頂點應按特定的順序CW / CCW 。
您應該確定目標側為線而不是點。
由於某些點位於雙方,因此確定單個點是錯誤的。
因此,例如:
x+
軸向右 y+
軸下降 A,B,C
然后,根據y
軸的變化確定左側/右側 。 因此,在對任何輪廓線( AB,BC,CA
)進行柵格化時AB,BC,CA
您會看到第一個點與最后一個點之間的y
變化。 例如AB
行:
dy = (B.y-A.y)
if (dy> 0) right
if (dy< 0) left
if (dy==0) both
有關更多信息,請參見相關的Q / A 封閉凸多邊形填充 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.