我正在阅读Chris Hecker's Texture Mapping articles并且在我的生活中,我无法理解他是如何使用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
变量来实现比较。在比较的前半部分(&#39; if&#39;),MiddleCompare
等于Middle
和BottomCompare
等于Bottom
。但是当BottomCompare
等于3
时,下半部分(&#39;其他&#39;)Bottom
等于0
,而MiddleCompare
等于{{1}当3
等于Middle
时。那是为什么?答案 0 :(得分:2)
你缺少的是:
多边形缠绕规则。
三角形/多边形的顶点应按特定顺序 CW / CCW 。
您应该确定行的目标面而不是点。
决定单点是错误的,因为双方都有一些观点。
例如,如果:
x+
轴正确y+
轴下降A,B,C
然后根据y
轴的变化确定左/右侧。因此,在栅格化任何轮廓(AB,BC,CA
)时,您会查看第一个和最后一个点之间的y
更改。例如AB
行:
dy = (B.y-A.y)
if (dy> 0) right
if (dy< 0) left
if (dy==0) both
有关详细信息,请参阅相关的 Q / A closed convex polygon filling。
答案 1 :(得分:1)