总体对比表格
框架 | 总体评价 | 主要特点 | 备注 |
---|---|---|---|
QT | 最新的C++开源框架,封装了图形QGraphics的常用操作,便于扩展。 | 开源,免费,跨平台 | |
MFC | 不便于扩展和维护,CDC画图功能齐全 | 经典的框架,已不再更新 | |
SLMF | 适合简单的图形绘制,支持旋转,平移等功能,适用于小游戏开发 | ||
skia | 完整的2D图形库,可绘制文本,几何图形和图像 | ||
Cairo | 完整的2D图形库,包含了 编辑、移动、缩放、路径合并 等功能 |
c++绘图框架
QGraphics 【重点推荐】
QT ,包含了 视图转换 工具,封装了图形的常用操作,便于扩展。
- 项坐标: 围绕它们的中心点(0,0) 左右变换 也是按这个进行的。 父坐标 场景坐标: Scene 为所有的项 提供了基本的坐标系统。
- 每个项都有一个场景坐标绑定的 视图坐标: View 坐标,窗口部件的坐标。 每个坐标对应1个像素。 左顶角永远是 (0,0),右底脚 总是
- (视宽, 视高)。所有鼠标事件 和 缩放事件 都是以视窗坐标收到的,需要将这些转换成 场景坐标,以方便和项进行交互。
https://www.bogotobogo.com/Qt/Qt5_QGraphicsView_QGraphicsScene.php
介绍 QGraphicsScene 和 QGraphics
SLMF
不适合做应用程序,有黑框的出现
比较适合做小游戏。
启动
VS2012
Visual C ++ 12(2013)-32位
D:\tools\SFML-2.5.1\include
D:\tools\SFML-2.5.1\lib
附加依赖的库
sfml-graphics.lib;sfml-window.lib;sfml-system.lib;
拷贝 D:\tools\SFML-2.5.1\bin 目录下,所有的 dll 到 Debug 目录下, 运行结果如下:
添加静态库, 不可以。没包含 opengl 的库
sfml-graphics-s-d.lib;sfml-window-s-d.lib;sfml-system-s-d.lib;
SFML_STATIC;
设定桌面窗口
sfml mfc
建议用 .net 来做
sfml gui
http://lalaland.github.io/gtkGuide.html
可以集成一块画图区域,但不能使用 sf::Event
GTK+: 用于创建图形用户界面的跨平台工具包
sfml sf::view
https://github.com/SFML/SFML/wiki/Tutorial%3A-Using-View
sf::VideoMode
有视图,以后代码
视图由一个源矩形和一个目标视口组成,该源矩形定义了2D场景的显示部分.该目标视口定义了源矩形的内容将在渲染目标(窗口或纹理)上显示的位置
视口允许将场景映射到渲染目标的自定义部分,并且可以用于例如分屏显示或显示小地图。
我们还拥有世界坐标系,尽管不是“物理上”,即您用于绘制子画面等的坐标。
,因此sf::View坐标系的原点始终位于窗口的中心
,view.zoom(0.5f)但是从程序员的角度来看,这是完全不同的。正如我们将在下一段中学习的那样,我们可以使用视口将渲染部件映射到窗口上的特定区域。现在,如果我们以与以前相同的大小应用场景,则如果侧面的比例不再相同,所有内容将缩小并最终拉伸。这可以创建一些想要的效果,但大多数情况下不会。通过设置一个特定的大小,我们告诉sf::View视图应该绘制多大,而不在渲染部件上进行任何可见的变换。
sf::Vector2f v1(16.5f, 24.f);
是否具有扩展性
【由于只有游戏相关的 功能,舍弃 gfml 功能】
资料
用C++和SFML写游戏-SFML介绍(1)
https://blog.csdn.net/qq_33567644/article/details/91126507
SFML从入门到放弃(1) 窗口和交互
https://www.cnblogs.com/karl07/p/10285692.html
skia
Skia是一个完整的2D图形库,可绘制文本,几何图形和图像。
https://github.com/google/skia
Skia是一个开源2D图形库,它提供可在各种硬件和软件平台上工作的通用API。它用作Google Chrome和Chrome OS,Android,Flutter,Mozilla Firefox和Firefox OS以及许多其他产品的图形引擎。
magnum
图形处理软件
打印和编辑功能
https://github.com/mosra/magnum
https://magnum.graphics/
Cairo
https://www.cairographics.org/FAQ/
C 程序
包含,直线,弧线,曲线,封闭道路的 接口
移动功能
https://gitlab.com/cairo/cairo-demos
D:\exercise\cairo-demos\path_paint
包含了 编辑、移动、缩放、路径合并 等功能
#include <gtk/gtk.h>
#include <cairo.h>
#include <math.h>
#include <gdk/gdkkeysyms.h>
#include <string.h>
采用 makefile 进行编译
https://www.gtk.org/docs/apis/
https://www.cairographics.org/samples/
主要就是画线,画文字 的 图形示例, 有图片介绍。
https://www.cairographics.org/examples/
矢量图形 抗锯齿
https://www.cairographics.org/xr_ols2003/html/