gpt4 book ai didi

c++ - Bresenham 用于球体?

转载 作者:太空狗 更新时间:2023-10-29 23:07:05 24 4
gpt4 key购买 nike

<分区>

我正在编写一个简单的软件渲染器,它效果很好,(使用三角形和球体/圆形基元),但我在深度缓冲区方面遇到了一些问题实现——我需要一个 Bresenham 圆的版本将使用正确的 3d 值的算法(需要填充深度缓冲区)。简单的“平面”2d 圆形版本。

    void FillCircleWithDepth(int x1, int y1, float z, int radius, unsigned color)
{


int left = x1-radius-1;
int right = x1+radius+1;
int up = y1-radius-1;
int down = y1+radius+1;


if(!_rectanglesOverlap(0, 0, CLIENT_X, CLIENT_Y,
left, up, right, down ) )
return;


int x = 0; //0
int y = radius; //1
int d1 = 3 - (2 * radius);

do
{
if (d1 < 0) d1 += (x<<2) + 6;
else d1 += ((x-(y--))<<2) + 10;

drawScanlineWithDepth(y1+x, x1-y, x1+y, z, color);
drawScanlineWithDepth(y1-x, x1-y, x1+y, z, color);
drawScanlineWithDepth(y1+y, x1-x, x1+x, z, color);
drawScanlineWithDepth(y1-y, x1-x, x1+x, z, color);
x++;
}
while(x<y);
}

带来深度缓冲区错误,我还需要在绘制时计算适当的 z扫描线。它的 3d 版本看起来如何?

//编辑

我在这里,在堆栈中,找到了几个接近的问题,但没有一个对此的精确回答 - 有一些需要 pressenham领域.. 有人可以回答吗?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com