首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bresenham for spheres?

Bresenham for spheres?
EN

Stack Overflow用户
提问于 2012-12-03 03:07:47
回答 1查看 713关注 0票数 3

我正在写一个简单的软件渲染器,它工作得很好(使用三角形和球体/圆基元),但我在深度缓冲区实现方面有一些问题-我需要一个版本的Bresenham圆算法,它可以使用正确的3D值(需要填充深度缓冲区)。简单的‘扁平’2d圆形版本。

代码语言:javascript
复制
    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。有人能回答这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2012-12-03 15:16:44

就像3D投影下的三角形一样,1/z的倒数表现为线性;对于每个运动x+=dx或y+=dy,都涉及到与z的倒数的线性差关系: rec_z(x+dx,y+dy) = rec_z(x,y) + a*dx + b*dy,其中a和every几乎与平面的法向量相关。

这就引出了另一个问题:法线向量有三个分量。虽然绘制三角形不是那么明显,但在透视校正下绘制圆并不是简单地缩放x和y,而是有更多的自由度。

(example of such image here) --出于版权原因,它是一个链接,而不是嵌入的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13672702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档