适用于 Windows/C++ 的优秀 2D 图形绘制 API 是什么?
我一直在开发一个小型应用程序,并且一直在使用 DirectX/3D 将纹理绘制到屏幕上(所有二维元素)。我发现 API 非常容易使用,并且可以使用 OOP 原则进行整合,但我忍不住觉得在这么小的东西上使用 DirectX 实在是太过分了。
不过,我似乎无法就一个好的替代方案达成共识。有什么建议吗?
编辑: 本机 alpha 混合和 PNG 文件支持是必要的。
带着很多第一次的爱, 詹格勒
I've been working on a small little application, and I've been using DirectX/3D to draw textures to the screen (all 2-dimensional elements). The API, I find, is pretty easy to use and to incorporate using OOP principles, but I can't help but feel that using DirectX on something this small is insanely over-kill.
I can't seem to find consensus on a good alternative, though. Any suggestions?
EDIT: Native alpha-blending and PNG file support is necessary.
With much first-post love,
Jengerer
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您需要 alpha 混合,则必须使用图形硬件;唯一的好方法是使用类似于您现在的做法的 3D API(DirectX 或 OpenGL)。任何替代方案(GDI/+ 或 DirectDraw)都不会使用完整的图形硬件来加速混合,并且必须在 CPU 上执行,从而大大降低性能。
如前所述,Direct2D 也是一个选项 - 它在功能上是 Direct3D 之上的一个层,支持更多 2D 特定功能以及出色的文本支持。
If you need alpha blending you have to use the graphics hardware; the only good way to do that is to use a 3D API similar to how you're doing it now (DirectX or OpenGL). Any alternative (GDI/+ or say, DirectDraw) will not use the full graphics hardware for accelerating blending and will have to perform it on the CPU, greatly reducing performance.
As mentioned, Direct2D is an option also--it is functionally a layer on top of Direct3D that supports more 2D specific functionality as well as excellent text support.
如果不需要 XP 支持,请使用 Direct2D.
否则,请使用 GDI+。
If you don't need XP support, use Direct2D.
Otherwise, use GDI+.
Windows 包含一个开箱即用的。 (GDI32.DLL)。可以连接到
WM_PAINT
WindowProc 调用中的消息并使用
BeginPaint()
开始绘图。 Zetcode 上提供了关于可以做什么的非常好的想法和基本教程。Windows includes one out of the box. (GDI32.DLL). It's possible to hook into the
WM_PAINT
message in the WindowProc call and useBeginPaint()
to start drawing. A really good idea of what can be done and a basic tutorial is available on Zetcode.我过去曾使用过 Gosu ,并且使用起来没问题。它被设计为更多地与 Ruby 一起使用,但对于 C++ 来说也不错。我们在一款快速横向卷轴游戏中使用了它,在其中我们搞乱了 z 顺序和 Alpha 通道。也许值得一看。
I have used Gosu in the past, and it has been alright to work with. It was designed to be used more with Ruby, but it is not bad for C++. We used it in a quick side scroller game, where we messed with z-order and the alpha channel. It might be worth checking out.