【问题标题】:References for rendering 2-dimensional elements (circle, rounded rectangles, blurry ~)渲染二维元素的参考(圆形、圆角矩形、模糊~)
【发布时间】:2012-02-13 11:49:03
【问题描述】:

我正在编写一个 Python 模块,它应该为低级 GUI 平台提供一个简单的 OOP 接口。为此,需要创建一个包装类,供模块中的类使用。

这是基本实现的 (yet) 类图。

这个问题实际上与包装的设计无关,但如果您对此有疑问或知道什么可能更好,我不会介意任何 cmets/critics。 p>

DrawArea 类是底层平台和包中的类之间的粘合剂。事件通常从这里开始,因为包装器应该识别鼠标/键盘事件并通知它的孩子。

现在,如您所见,DrawArea 类需要实现一些函数来将基本元素渲染到 GUI 上。现在,我想了解渲染圆、圆角矩形、线条(有粗细)和抗锯齿背后的魔力。一个原因是我只是对那个主题感兴趣,另一个是我想用这个包提供一个实现。 (将用 C/C++ 编写,我很确定 Python 对于此类渲染操作会很慢,不是吗?)

现在我的问题

  1. 有没有关于如何渲染圆形、椭圆、圆角矩形或线条的好的参考资料(有粗细,单像素线条很容易..)?
  2. 关于如何实现抗锯齿有什么好的参考资料吗?
    • 例如,抗锯齿是在渲染元素时完成还是在完成所有渲染操作后应用?
  3. 使用类似Path 类的东西会更好吗? IE。应呈现的表单的矢量化表示。这将有利于呈现任何类型的二维形式,但我不知道如何实现它。有没有很好的矢量图形渲染参考资料?

【问题讨论】:

  • 这是题外话,但我可以问一下你用什么来制作那个漂亮的类图吗?
  • @SigTerm Diggin 通过源代码不是黄色的,而是一个起点。在考虑抗锯齿时,我实际上并没有考虑过 Qt。我的目标不是创建一个糟糕的 Qt 克隆。我的目标是启用不受操作系统风格约束的高度动态和可定制的用户界面。仍然“有点”低级,但面向对象而不是线性渲染。我已经完成了这个模块的原型,但我不相信这个设计。此外,应该添加更多期货(如 AA)。 (参见上一个版本的this video
  • @Niklas R:“高度动态和可定制的用户界面,不受操作系统风格的约束。”这与 Qt 提供的有什么不同(你见过“qtdemo”吗?)?另外,请记住,此类系统的开发/维护会占用您大量时间 - 可能需要数年时间。
  • @NiklasR 当您要求提供参考时,我又添加了一些。我希望你喜欢它们,这将帮助你“助推”/“起点”:)。在 2D 中绘图可以是一个非常有趣的。我已经在 386 486 次上编写了游戏,然后进行了 C/汇编优化,这是必须的和具有挑战性的乐趣:)。花时间为你自己画线、圆写一些“玩具例子”。小心角落案例。填的比较流利的会全部2D渲染技术,开始搭建app吧。
  • 记得手动奖励最佳答案,因为自动积分会飞走,或者只会给出一半的积分:stackoverflow.com/faq#bounty ;)。

标签: c++ python user-interface rendering 2d


【解决方案1】:

Anti-Grain Geometry - High Fidelity 2D Graphics - A High Quality Rendering Engine for C++ 是一个编程库,是我最喜欢的矢量图形渲染选择。

您可能想制作一个 wrapper(看看 documentation ),查看 sources 或 ...

Jump to Research section 在这里您可以找到很多信息:“高保真 2D 图形 - 高质量渲染”。那里提到了火盆线和其他主题。我最喜欢的部分是"Texts Rasterization Exposures" 关于亚像素渲染的部分。

如果您对如何在 C+ 汇编级别优化绘图线、多边形等感兴趣,

这里是许多 2D 计算机图形算法之一的示例:

【讨论】:

  • 感谢您的精彩回答,Grzegorz。这么多有用的信息和参考资料。这就是我寻找的!你让我今天一整天都感觉很好。 ;) 以防万一,当它即将到期时,您将收到赏金。谢谢!
  • 不客气。我希望它对您有所帮助,并且您在实现这些东西时玩得开心:)。
猜你喜欢
  • 1970-01-01
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多