zoukankan      html  css  js  c++  java
  • GUI图形图像编程主要技术的学习梳理

    开发实现GUI图形应用程序是编程领域的一个重要部分。本文在参考网文的基础上,记录下自己对这方面的梳理和理解,仅作为学习记录。

    Windows平台下有哪些技术可以进行GUI开发?

    微软系:GDI、GDI+、Direct2D、Direct3D、DirectX
    其它:openGL

    GID、GID+是什么?

    • .net framework框架自身自带的相关类库

    • Direct系列和GDI性能最大的差别在于使用GPU还是CPU来计算数据并输出绘制。通常来说,GDI/GDI+火力全开也不能满足全屏平滑滚动,包括帧同步等问题。

    • 其次没有硬件加速,绘制基本上就是基于memory copy的数据搬运。从实现的角度 GDI和GDI+ 和AGG都是软件实现的。原理类似于比如我要在屏幕绘制一个矩形的色块,他的代码就类似于如下代码,因此画面复杂、帧率较高等场景,CPU就可能抗不住。

      for (int i = 0;i < w; ++i)
      for (int j = 0;j < h; ++j)
      {
      bitmap[i][j] = rgba(r,g,b,a);
      }
      
    • 软件渲染有他的优点就是不需要显卡,有比较好兼容性。正是因为软件实现,所以很多软件的兼容行考虑,就时采用GDI来处理。

    • 缺点就是CPU密集型的,比较不容易在渲染的性能上面做出很大的文章。

    Direct2D是什么?

    • 功能跟GDI+一样强大,操作跟GDI+一样方便
    • 速度比GDI和GDI+高几个数量级
    • 就是为了解决2D游戏、UI的场景
    • D2D也不是利用GPU硬件计算这么简单的,如下图,gpu只会计算三角形。因此需要CPU将目标图形按照某种算法切换成三角形,再交给GPU处理,但是综合来说也是快。

    img

    • D2D也是上层API,需要调用D3D作为底层。

    Direct3D是什么?

    Direct3D是指具体3D的部分,而DirectX是泛指,包含2d、3d、音频、输入及开发调试工具等一系列;

    DirectX是什么?

    • 通常DirectX比GDI帧率高三倍以上;
    • GDI是在内存中绘图,然后再传入显存,最后显示出来。
    • DirectX当初出现,就是为了解决Windows在游戏中绘图太慢专门开发的。Windows不允许直接读写显存,DirectX提供了直接利用显存绘图的API。这样节省了一个步骤,直接就带来三倍的性能提升。

    img

    • 在WPF中,底层的图形技术不再是GDI/GDI+,而是DirectX。这意味着不管是设计复杂的三维图形(这是DirectX的特长),还是仅仅绘制几个按钮以及简单的文本,所有的绘图工作都是通过DirectX管线来完成

    OpenGL、OpenGLES是什么?

    • 和DirectX等价的东西
    • OpenGL 是 Cross-Platform的,而且是Open Source的
    • 发展趋势:直到DirectX6时代,OpenGL都被认为是比DirectX更加优秀的API,即使那个时候DirectX已经有《CS》《极品飞车5》等大作的支持,却依然不受当时FPS游戏霸主id Software的待见。作为那个时代的显卡杀手,《Quake III》都仅仅只支持OpenGL。DirectX7发布之后DirectX和OpenGL开始逐渐平起平坐。直到2000年DirectX8的发布才使DirectX在游戏领域完全确立了自己的优势

    扩展:Linux、macOS系统,Android 、IO的类似组件分别是什么名称?

    • Linux、macOS上支持的是OpenGL
    • 移动端(Android、IOS)也全部是openGL
    • OpenGL ES 在 iOS 12 后被弃用
    • 苹果最新也开发了metal
    • 图形这块的发展是靠用户、游戏厂商的驱动,而Linux和macOS作为相对小众的消费级操作系统平台,在图形图像这方面确实不如Windows
  • 相关阅读:
    斜率优化dp学习
    拓扑排序
    P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)
    网络流24题!!!!
    费用流板子
    网络流dinic板子
    小花梨的数组
    C. 小花梨判连通
    splay树
    hdu4467 graph
  • 原文地址:https://www.cnblogs.com/chen943354/p/14124900.html
Copyright © 2011-2022 走看看