从头开始绘制大圆圈

Jac*_*oed 2 c++ graphics geometry drawing 2d

我是C++的新手,但这种语言对我来说似乎没问题.作为一个学习项目,我决定制作一个小型2D图形引擎.这似乎是一个艰难的项目,但我知道如何继续前进.

我还没有真正开始,但是当我遇到这个问题时,我正在脑海中形成一些东西:在某些时候我将不得不在屏幕上绘制圆圈.我现在采取的方法是这样的:

in a square with sides from (x-r) to (x+r) loop through x and y,
if at each point, the current distance sqr(x^2+y^2) is less than or equal to r
, then draw a pixel at that point.
Run Code Online (Sandbox Code Playgroud)

如果没有,这将有用,不要打扰告诉我,我会弄清楚.如果x + r&y + r在屏幕上,我会因为只绘制这个圆圈.

问题在于我有时需要画大圈.例如,如果我需要绘制半径为5000的圆,则(如果像素循环计算需要循环总共10000 ^ 2次).因此,对于2Ghz的处理器,这个单圈只能渲染2Ghz /(10000 ^ 2),这是〜22次/秒,同时占据整个核心(相信它只需要每像素一次计算,这是无处可去的真相).

现在哪种方法是正确的?我想这与使用GFX进行这些简单的计算有关.如果是这样,我可以使用OpenGL for C++吗?我也想学习:)

Kod*_*der 6

我的第一个C/C++项目实际上也是图形库.我没有OpenGL或DirectX,当时正在使用DOS.我从中学到了很多东西,因为我不断发现新的,更好(和更快)的方式来绘制到屏幕上.

现代操作系统的问题在于它们并不能真正让你做我当时所做的事情.您不能直接开始使用硬件.坦率地说,这些天你不再想要了.

你仍然可以自己画一切.如果你想放置自己的像素,请看看SDL.这是一个C库,您可以将其包装到您自己的C++对象中.它适用于不同的平台(包括Linux,Windows,Mac上,...),并在内部它会利用之类的DirectX或OpenGL.

对于真实世界的图形,人们不仅仅是绘制一个自己的像素.那效率不高.或者至少不在不能直接使用硬件的设备上......

但出于您的目的,我认为SDL绝对是您要走的路!祝你好运.

  • 是的,但不是用于绘制半径为5000像素的实心圆圈,对吧?!就是那个问题.考虑到这一点,有一种更有效的方法,而不是逐个绘制像素. (2认同)