用OpenGL的Bresenham算法绘制圆

时间:2011-02-28 14:04:53

标签: c++ opengl geometry bresenham

我可以用算法绘制一个圆圈。然而,边界看起来很奇怪,像素看起来彼此分开。我希望他们更接近。我试图扩大点大小。但结果并不是那么好。所以,我在想,如果我可以完全填充像素,也许会更好。(我想它是方形的。)我该怎么做或者你有更好的想法吗? 它现在看起来像这样: http://img690.imageshack.us/i/circlev.jpg/

非常感谢你。

3 个答案:

答案 0 :(得分:5)

没有代码,很难诊断问题。像素的实际布局看起来对于该算法是正确的。但是,您似乎正在使用不直接将世界空间转换为屏幕空间的投影矩阵。

尝试使用正交投影,您可以确保世界坐标中的一个偏移值恰好在屏幕空间中的一个像素。

答案 1 :(得分:2)

根据你的jpeg判断,我想知道你认为世界空间中的一个像素,实际上不是。也许你的投影矩阵没有达到你想象的那么高。

是否启用了GL_POINT_SMOOTH? - 这可能是搞乱事情。那些像素看起来很奇怪。

假设使用此算法对您很重要(并且您对可能更高效的方法不感兴趣),您可以为每个“像素”绘制四边形而不是使用GL_POINTS。

答案 2 :(得分:0)

使用sin / cos方法,然后你可以从一个点到另一个点绘制线条,也可以让你更改多边形细节,更不用说它也更容易填充圆形(从中间到边缘绘制三角形) )。

如果您使用更高的细节,结果将与Bresenham几乎相同。