是否有用于在3D平面上栅格化2D圆的DDA样式算法?

时间:2016-12-27 18:32:43

标签: c algorithm graphics 3d bresenham

我基本上对Bresenham圆形绘图的必然结果感到好奇,但在3D视角下,最终结果是Y(垂直)平面上的一个平面圆。对于这类事情,是否存在神奇的DDA类型算法?

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

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

circle drawn using lines with a 23 degree increment

伪代码就像这样:

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))
}

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

干杯!

0 个答案:

没有答案