c++ - 从头开始画大圆圈

标签 c++ graphics drawing 2d geometry

<分区>

我是 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.

这行得通,如果行不通,请不要告诉我,我会想办法的。如果 x+r & y+r 在屏幕上,我当然只会画这个圆圈。

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

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

最佳答案

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

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

您仍然可以自己绘制所有内容。如果您想放置自己的像素,请查看 SDL。这是一个 C 库,您可以将其包装到您自己的 C++ 对象中。它适用于不同的平台(包括 Linux、Windows、Mac 等),并且在内部它将使用 DirectX 或 OpenGL 等东西。

对于真实世界的图形,人们不只是着手绘制自己的像素。那是没有效率的。或者至少不能在不能直接使用硬件的设备上...

但出于您的目的,我认为 SDL 绝对是您的不二之选!祝你好运。

关于c++ - 从头开始画大圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120884/

相关文章:

c++ - lambda 表达式的右值和左值引用 - gcc 与 msvc

c++ - 如何使用visual studio和MFC C++在windows上实现预览

c++ - 为什么可以指定异常规范的参数类型?

c++ - 区间 C++ 中的数字

opengl - GLSL设置纹理单元统一问题

c++ - 插入MYSQL数据库表后出现错误消息

java - 处理 3 离屏丑陋

c# - 非多行左对齐选项卡控件

c# - 防止 System.Drawing.Graphics 更新

java - 绘图程序错误