我正在协助有人使用用户界面代码来可视化数学图像分析.在此过程中,我们将2D形状的一部分分割为三角形,并在UI上填充其中一些三角形.
我们正在寻找一种填充算法,该算法可以保证如果两个三角形共享一条边(具体来说,如果三角形的任意两个顶点相同),那么无论绘制顺序和锯齿是什么,线上都不会有空白的未拉伸像素两者之间.(如果某些像素被绘制两次,那就没问题.)在任意缩放下,结果应该看起来不错.某些三角形可能是非常薄的细长条,宽度低至1像素.
理想情况下,它也应该是一个合理有效的填充算法!
在三角形渲染中不会使用消除锯齿,因为最终图像需要为1位深度.
上下文是图像识别应用程序,因此所有顶点坐标都精确到一个像素.
我正在尝试修复此三角形光栅化器,但无法使其正常工作.出于某种原因,它只绘制了一半的三角形.
void DrawTriangle(Point2D p0, Point2D p1, Point2D p2)
{
Point2D Top, Middle, Bottom;
bool MiddleIsLeft;
if (p0.y < p1.y) // case: 1, 2, 5
{
if (p0.y < p2.y) // case: 1, 2
{
if (p1.y < p2.y) // case: 1
{
Top = p0;
Middle = p1;
Bottom = p2;
MiddleIsLeft = true;
}
else // case: 2
{
Top = p0;
Middle = p2;
Bottom = p1;
MiddleIsLeft = false;
}
}
else // case: 5
{
Top …Run Code Online (Sandbox Code Playgroud)