1

我基本上对 Bresenham 的圆图的推论感到好奇,但在 3D 透视图中,最终结果是Y(垂直)平面上的平面圆。有没有一种神奇的 DDA 类型算法来处理这类事情?

请注意,DDA的意思是主要使用整数并避免尽可能多的乘法和除法,因为主要瓶颈是透视Z除法。

到目前为止,我想出的是以一些增量循环 360 度,并根据增量在投影坐标和下一个坐标之间画一条线。下图是使用 23 度增量的测试(我会使用 22.5,但这适用于整数查找,只有整数度精度):

使用增量为 23 度的线绘制的圆

伪代码类似于:

for (degree = 0; degree < 360; degree += degree_inc) {
    z1 = z + radius * cos(degree)
    x1 = x + radius * sin(degree)
    y1 = y

    next_degree = degree + degree_inc
    if (next_degree >= 360) {
        next_degree = 0;
    }
    z2 = z + radius * cos(next_degree)
    x2 = x + radius * sin(next_degree)
    y2 = y

    line(project_x(x1,z1), project_y(y1,z1),
         project_x(x2,z2), project_y(y2,z2))
}

显然,对实际代码(查找表和预先计算的数量)有很多小的优化,但这就是它的本质。

干杯!

4

0 回答 0