将具有浮点顶点的段映射到2D整数空间(伪像素)的算法

时间:2013-01-14 22:31:40

标签: algorithm graphics floating-point rendering

我希望在任何线段方向/长度的最小平均时间内将线段渲染到虚拟整数空间。该段由具有实数值(双精度)的两个点定义。

我已经提出了一些可能有用的想法,但是它们让我觉得可怕的,启发式的黑客攻击。 (即,根据细分的方向,有一个明确的“更好的方向”)。

当然有一种比蛮力方法更好的方法(在端点之间找到“长”方向(x轴或y轴),然后沿着该轴沿着每个整数值步进,并在正交轴上舍入值确定沿“长”轴的每个整数值的一个像素(整数点)位置。)

2 个答案:

答案 0 :(得分:2)

你对“更好的方向”的看法让我想起了Bresenham线算法,这可能是你想要的吗? http://www.cs.helsinki.fi/group/goa/mallinnus/lines/bresenh.html

[编辑]

与非整数端点的区别对我来说并不明显,但有一个例子here

当您在长轴上每个整数范围绘制一个像素时,我假设您的绘图点具有相同的强度(无抗锯齿)。

所以你可以在没有整数优化(你已经做过的)和最后的圆点的情况下实现bresenham。 或者通过整数bresenham使用定点数学运算(即将坐标乘以65536并进行舍入,在长轴上以较长的步长运行bresenham,并在绘制之前将输出点分解或移回所需的值)。

但是,无论您是绘制字体,还是细分曲线或线框矩形,使用直接bresenhams或使用抗锯齿算法都可能看起来更好。

答案 1 :(得分:1)

您应该找到与X和Y值相关的直线方程。然后在每个整数x坐标处评估它。这将为您提供y坐标作为浮点数,然后您可以将其舍入并绘制。