精华内容
下载资源
问答
  • 计算机图形学完整笔记():图形学概论

    千次阅读 多人点赞 2020-08-14 08:57:33
    文章目录第章 计算机图形学概论1.1 全书概述1.2 计算机图形学定义1.3 计算机图形学研究内容1.4 计算机图形学的发展历史1.5 计算机图形学的应用领域1.6 计算机图形系统组成1.7 图形显示设备1.8 图形学相关概念1.9 ...

    前言

    如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。

    第一章 计算机图形学概论

    1.1 全书概述

    • 图形学基本知识

      • 光栅图形学
        • 扫描转换、区域填充、裁减、反走样、消隐
      • 二维、三维图形变换及观察
    • 几何造型

      • 参数曲线曲面基本概念、Bezier曲线曲面、B样条曲线等
    • 真实感图形学

      • 颜色模型、简单光照模型、纹理映射、光线跟踪

    1.2 计算机图形学定义

    • 计算机图形学
      • 计算机图形是计算机产生的图像。
      • 计算机图形学就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理和算法。
      • IEEE定义:Comput graphics is the art or science of producing graphical images with the aid of computer.
    • 计算机图形学的发展和应用在某种意义上已成为计算机软、硬件发展水平的标志。

    1.3 计算机图形学研究内容

    • 主要研究内容

      • 如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法,构成了计算机图形学的主要研究内容。
    • 计算机生成一副表示物体的图形的三个步骤

      • 造型技术
        • 在计算机中建立所要生成图像的物体的模型,即给出表示该物体的几何数据和拓扑关系
        • 比如教室里的桌子、椅子、墙,用圆柱、平面等表示出来。
      • 光照模型
        • 希望用一些简单的数学模型来近似、代替那些物理学的模型,为模拟物体表面的光照物理现象的数学模型叫光照模型。
      • 绘制(渲染)技术
        • 选择适当的绘制算法来把这个场景画 (渲染) 出来。
        • 绘制一幅三维物体图像所涉及的知识,实际上就是计算机图形中每个像素看上去应该是什么颜色的问题。
    • 计算机图形的发展方向

      • 准确性 -> 真实性 -> 实时性

    1.4 计算机图形学的发展历史

    • 1950年,第一台图形显示器作为美国麻省理工学院 (MIT) 旋风 I 号计算机的附件诞生。
    • 1963年,Suther land 发表博士论文。其中第一次提出了 graphics 这个词。
      • Suther land 被公认为开创交互式图形技术的奠基人,被称为 “计算机图形学之父”,并于 1988 年获 “图灵奖”。
    • 1962年,雷诺汽车公司的工程师 Bezier 提出 Bezier 曲线、曲面的理论,成为 CAGD (计算机辅助几何设计) 的先驱。
    • 1964年,MIT教授 Steven A. Coons 提出了超限插值的新思想,通过插值四条任意的边界曲线来构造曲面。
    • 70年代,光栅显示器出现了。光栅显示器屏幕是由像素组成的,由此诞生了大量算法,如区域填充、裁剪、消隐等基本图形概念、及其相应算法。
    • 真实感图形和几何造型技术这个时候也开始出现了。
    • 1975年,Phong 提出了著名的简单光照模型 - Phong模型 (标志着真实感图形的出现和实用化,直到现在 Phong 模型还被大量的采用)
    • 1980年,Whitted 提出了光透视模型 - Whitted 模型,成为第一次提出光线跟踪算法的范例。
    • 几何造型技术:通俗地讲,该技术就像小孩搭积木,用简单的一些体素来构建复杂的模型。
    • image-20190614104017846.png

    1.5 计算机图形学的应用领域

    • 人机交互和图形用户界面

      • 最理想的是开发 “能听、能说、能理解人类语言” 的计算机,人们可以和计算机交谈,而不像现在这样仅限于窗口、图标、鼠标、指针 (WIMP) 界面。
    • 计算机辅助设计与制造 (CAD/CAM)

      • CAD/CAM 是计算机图形学在工业界最广泛、最活跃的应用领域。
        • 飞机、汽车、船舶、宇宙飞船的外形设计
        • 发电厂、化工厂等的布局
    • 真实感图形实时绘制与自然景物仿真

      • 计算机中重现真实世界的场景叫做真实感绘制。
    • 计算机动画、游戏、电影

    • 计算机艺术

      • 计算机艺术是科学与技术相结合的一门新兴的交叉学科,是计算机应用的一个崭新、富有时代气息的领域。
    • 计算机仿真

      • 计算机仿真是计算机技术建立被仿真系统的模型,并在某些实验条件下对模型进行动态实验的一门综合性技术。
    • 科学计算可视化

    • 虚拟现实

      • 虚拟现实是利用计算机模拟现实的场景,使参与者获得与现实一样的感觉。
      • 准确地说,是利用电脑模拟产生一个三维空间的虚拟世界,提供使用者关于视觉、听觉、触觉等感官的模拟,让使用者如同身历其境一般,可以及时、没有限制地观察三度空间内的事物。
    • 地理信息系统

      • 地理信息系统是建立在地理图形之上的关于各种资源的综合信息管理系统,是计算机图形学的一个重要应用领域。
    • 农业上的应用

      • 借助计算机图形生成技术来保存和再现不同作物种类和不同生长时期的植物形态,模拟植物的生长过程,从而合理地进行选种、播种、田间管理以及收获等。

    1.6 计算机图形系统组成

    • 五大功能

      • 一个交互式计算机图形系统应具有计算、存储、对话、输入和输出等 5 个方面的功能。
      • image-20190614105051842.png
    • 图形系统

      • 图形软件
        • 图形应用数据结构:对应一组图形数据文件,其中存放着欲生成的图形对象的全部描述信息。
        • 图形应用软件
          • 解决某种应用问题的图形软件,是图形系统中的核心部分,包括了各种图形生成和处理技术。如:photoshop、3Dmax等。
          • 图形支撑软件:大多数图形应用程序是建立在一定的图形支撑软件上。图形支撑软件需具有规范接口。
      • 图形硬件

    1.7 图形显示设备

    • 阴级射线管

      • 使用广泛:现在的图形显示设备绝大多数是基于阴极射线管 (CRT) 的显示器。

      • 阴极射线管的技术指标

        • 分辨率:一个阴极射线管在水平和垂直方向单位长度上能识别出的最大光点数称之为分辨率。光点亦称之为像素 (pixel)。
        • 显示速度
      • 要保持荧光屏上有稳定的图像就必须不断地发射电子束。只有刷新频率高到一定值后,图像才能稳定显示。大约达到每秒 60 帧即 60Hz 时,人眼才能感觉到屏幕不闪烁,要人眼觉得舒服,一般必须有 85Hz 以上的刷新频率。

    • 彩色阴极射线管

      • 三只电子枪,分别涂有红、绿、蓝三种颜色的光。
    • CRT图形显示器

      • 随机扫描的图形显示器 (画线设备)
        • 电子束的扫描轨迹随显示内容而变化,只在需要的地方扫描,而不必全屏扫描,因此速度快,图像清晰。
        • 一条线一条线地画图,因此也称为向量显示器。
        • 随机扫描系统是为画线应用设计的,因此不能显示逼真的有阴影场景。
      • 光栅扫描显示器 (画点设备)
        • 不能直接从一个可编地址的像素画一条直线到另一个可编地址的像素,只可能用尽可能靠近这条直线路径的像素点来近似地表示这条直线。
        • 在光栅扫描系统中,电子束横向扫描屏幕,一次一行,从上到底顺次进行。当电子束横向沿每一行移动时,电子束的强度不断变化来建立亮点的图案。
        • 由于光栅扫描系统具有存储每一个屏幕点亮度信息的能力,所以,最适合显示浓淡和色彩图形。
    • 例题

      • image-20190614111614968.png

    1.8 图形学相关概念

    • 分辨率
      • 光点
        • 光点指电子束打在显示器荧光屏上,显示器能够显示的最小的发光点,一般用其直径来表明光点的大小。
      • 像素点
        • 像素点是指图形显示在屏幕上时候,按当前的图形显示分辨率所能提供的最小元素点。
      • 屏幕分辨率
        • 屏幕上显示的像素个数,以 (水平像素数 * 垂直像素数) 表示。
      • 显示分辨率
        • 是计算机显示控制器所能够控制的显示模式分辨率,简称显示模式。
        • 对于文本显示方式,显示分辨率用水平和垂直方向上所能显示的字符总数的乘积来表示。
        • 对于图形显示方式,则用水平和垂直方向上所能显示的像素点总数的乘积来表示。
      • 显卡分辨率
        • 显卡分辨率就是表示显卡输出给显示器,并能在显示器上描绘像素点的数量。
        • 一台电脑的最高分辨率是由显卡和显示器共同决定的。显示器最高分辨率是可以显示出来的最大分辨率。显卡的最大分辨率是最大能支持多少分辨率。
        • 电脑的最高分辨率取决于显卡和显示器最低的一个。
    • 显示器的点距
      • 指相邻像素点之间的距离。两点之间的距离越小越好。
      • 15寸显示器,点距达到0.28mm就足够。17寸显示器,需要0.27mm、0.25mm等。
    • 显示卡的作用与性能指标
      • 显示卡的基本作用就是显示图文,显示卡和显示器构成了计算机的显示系统。
      • 除了CPU和内存外,显卡对计算机的显示性能起着决定性的作用。

    1.9 图形图像的区别及存储格式

    • 图形图像的区别

      • 说法一
        • 图形是由计算机绘制而成的,而图像则是人为的用外部设备所捕捉到的外部的景象。
      • 说法二
        • 图形是矢量图,而图像是位图 (点阵图)
    • 图形 (像) 的构成属性

      • 几何属性
        • 刻画对象的轮廓、形状。包括点、线、面、体等。
      • 非几何属性
        • 视觉属性,刻画对象的颜色、材质等。包括明暗、色彩、纹理、透明性、线型、线宽。
      • 从构图要素上看,将图形分为两类
        • 几何属性有突出作用:工程图、等高线地图、曲面的线框图
        • 非几何属性有突出作用 (明暗图):真实感图形
    • 位图和矢量图定义

      • 位图 (点阵图)

        • 点阵图或像素图,计算机屏幕上的图是由屏幕上的像素构成的,每个点用二进制数据来描述其颜色与亮度等信息。
      • 矢量图

        • 面向对象的图形或绘图图形,是用数学方式描述的曲线及曲线围成的色块制作的图形。
        • 矢量文件中的图形元素称为对象。每个对象都是一个自成一体的实体,它具有颜色、形状、轮廓、大小和屏幕位置等属性。
    • 位图和矢量图区别

      • 存储方式的区别

        • 点阵文件存储图的各个像素点的位置信息、颜色信息以及灰度信息。
        • 矢量文件是用数学方程、数学形式对图形进行描述,通常使用图形的形状参数和属性参数来表示图形。
        • 因此,点阵文件存储空间比矢量文件大。
      • 缩放的区别

        • 点阵文件与分辨率有关,即在一定面积的图像上包含有固定数量的像素。
        • 矢量图形与分辨率无关,可以将它缩放到任意大小和以任意分辨率在输出设备上打印出来,不会影响清晰度。
      • 存储格式的区别

        • 位图存储格式:BMP、TIFF、GIF、JPEG、PNG
        • 矢量图存储格式:DXF、SVG、EPS、WMF、EMF
      • 总结

        • 位图矢量图
          存储内容各像素点位置信息、颜色信息以及灰度信息数学方程
          存储空间
          常见存储格式BMP、TIFF、GIF、JPEG、PNGDXF、SVG、EPS、WMF、EMF
          图形缩放失真不失真
          真实感图形效果容易实现不容易实现
    展开全文
  • 个非常简单好用的 Python 图形界面库

    千次阅读 多人点赞 2020-12-18 09:39:37
    前一阵,我在为朋友编写个源代码监控程序的时候,发现了个 Python 领域非常简单好用的图形界面库。说起图形界面库,可能会想到 TkInter、PyQt、PyGUI 等流行的图形界...

    前一阵,我在为朋友编写一个源代码监控程序的时候,发现了一个 Python 领域非常简单好用的图形界面库。

    说起图形界面库,你可能会想到 TkInter、PyQt、PyGUI 等流行的图形界面库,我也曾经尝试使用,一个很直观的感受就是,这太难用了。就去网上搜搜,看看有没有一些 demo,拿来改改,结果很少有,当时我就放弃了这些图形库的学习,转而使用了 vue+flask 的形式以浏览器网页作为程序界面,因为我会这个,即使实现起来稍微麻烦,但是也快。

    那有朋友可能问了:一定要学习图形界面吗?

    其实不一定,如果你写的程序都是自己用,或者配合其他程序员使用,那么直接命令行调用即可,完全不用学习图形界面?那什么时候要学呢?如果你要做游戏,或者你要为他人(非技术人员)编写软件工具,那么你就需要学习图形界面了。我是后者,偶尔受邀帮别人写点小工具,因此有个图形界面体验会好很多。

    今天要说的这个库就是 PySimpleGUI,在 GitHub 仓库[1]有 5.1K 个 star,20 天前还有人提交代码,可以说非常火热了。

    我看了官方文档,找了个 demo,花了 2 个小时的时间,写了 56 行代码,就搞定了一个具有图形界面的监控工具,如下:

    要说 PysimpleGUI 最吸引我的地方,在于它有 200 多个示例程序,几乎覆盖了日常的开发需求,拿来稍作修改就可以用,着实方便。

    PysimpleGUI 内部封装了 tkinter,Qt(pyside2),wxPython和 Remi,Remi 用于浏览器支持,因此你很容易将你的界面搬到浏览器中而无需修改代码。如下图:

    还有最吸引我的一点,就是足够简单,在几分钟内用几行代码就可以构建自定义 GUI 布局,对于初学者来说足够容易,对于高级用户来说足够强大。广泛的文档。有 100 多种内置颜色主题,200 多个示例程序[2],还经常更新。如果你玩 Raspberry Pi,也可以用这个库写界面,你说好用不好用。

    通常一个 PySimpleGUI 程序包含 5 个部分,见下面代码的注释:

    import PySimpleGUI as sg                        # Part 1 - 导入库
    
    # 定义窗口的内容
    layout = [  [sg.Text("What's your name?")],     # Part 2 - 排版
                [sg.Input()],
                [sg.Button('Ok')] ]
    
    # 创建窗口
    window = sg.Window('Window Title', layout)      # Part 3 - 窗口定义
                                                    
    # Display and interact with the Window
    event, values = window.read()                   # Part 4 - 开启主循环 window.read()
    
    # Do something with the information gathered
    print('Hello', values[0], "! Thanks for trying PySimpleGUI")
    
    # Finish up by removing from the screen
    window.close()  # Part 5 - 关闭窗口
    

    执行上述代码,会得到一个如下图所示的程序:

    这仅仅是一个类似 hello world 的程序,PySimpleGUI 还可以做出更加强大的图形界面和游戏界面,比如:

    最后,再告诉大家一条小技巧,如果看到好的图形界面程序,包括网站,记得收藏相关的代码,下次可以直接拿来用,提升开发效率。本文涉及的开源软件监控工具源代码,如果感兴趣,可以点击「阅读原文」获取下载连接。

    最后,学习一个新技术要看重其迁移能力,学习一次,可以使用无数次,那么该技术就值得学。原创不易,如果觉得文章对你有帮助,还请关注、在看支持。

    参考资料

    [1]

    GitHub 仓库: https://github.com/PySimpleGUI/PySimpleGUI

    [2]

    200 多个示例程序: https://github.com/PySimpleGUI/PySimpleGUI/tree/master/DemoPrograms

    展开全文
  • Android 图形架构之 ——概述

    千次阅读 多人点赞 2020-09-29 18:54:02
    本系列的文章,可以让明白,个View最终是如何显示到屏幕上的,从应用层到硬件抽象层。对分析app的卡顿,掉帧等 有很大帮助。 由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个纵观全局的感觉...

    前言

    本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层。对分析app的卡顿,掉帧等 有很大帮助。

    由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个纵观全局的感觉,再看每个细节,就能心中有数。战略上把握好了,战术上才能有的放矢

    Android 图形架构 之一 ——概述
    Android 图形架构 之二—— SurfaceFlinger 启动和连接
    Android 图形架构 之三—— 创建Layer、Surface、SurfaceControl
    Android 图形架构 之四——图形缓冲区的申请和消费流程及核心类
    Android 图形架构 之五——深入分析addView所发生的的一切
    Android 图形架构 之六——深入分析draw()是如何工作的
    Android 图形架构 之七——Choreographer 源码分析
    Android图形架构 之八——硬件VSync、VSync-app、Vsync-sf

    App 的绘图方式

    应用层可通过两种方式将图像绘制到屏幕上:使用 Canvas 或 OpenGL :

    • android.graphics.Canvas 是一个 2D 图形 API , Canvas API 通过一个名为 OpenGLRenderer 的绘制库实现硬件加速,该绘制库将 Canvas 运算转换为 OpenGL 运算,以便它们可以在 GPU 上执行。从 Android 4.0 开始,硬件加速的 Canvas 默认情况下处于启用状态

    • 使用 OpenGL ES 直接渲染到 Surface 。 Android 在 Android.opengl 软件包中提供了 OpenGL ES 接口

    下面这张官方图片,提现了 图像流 从 Image stream producers 到Surface,再被 Image stream consumers 中的SurfaceFlinger(其中也有OpenGl ES的一些工作)消费掉,再到硬件抽象层,最后显示到屏幕上

    在这里插入图片描述

    Activity 也是需要创建Surface的, Activity显示流程为:

    1. startActivity启动Activity;

    2. 为Activity创建一个window(PhoneWindow),并在WindowManagerService中注册这个window;

    3. WindowManagerService会要求SurfaceFlinger为这个window创建一个surface用来绘图。SurfaceFlinger创建一个Surface。(在SurfaceFlinger中Surface 是用Layer来体现的,也就是说App中的一个Surface ,对应SurfaceFlinger的一个Layer),这个layer的核心即是一个BufferQueue(),这时候app就可以在这个layer上render了;

    4. 将所有的layer进行合成,显示到屏幕上。

    一般app而言,屏幕会有三个layer:屏幕顶端的status bar,屏幕下面的navigation bar,还有就是app的UI部分。app的layer可能多余或者少于3个,例如对全屏显示的app就没有status bar。status bar和navigation bar是由系统进行去render。而app的UI部分对应的layer 是由它自己去处理(通知SurfaceFlinger处理),最后需要把这些layer合成 。

    Surface和SurfaceFlinger

    无论开发者使用Canvas 或 OpenGLI,一切内容都会渲染到 Surface 。在 Android 平台上创建的每个窗口都由 Surface 提供支持。

    SurfaceFlinger 会把系统中所有应用程序的最终的“绘图结果”进行“混合”,然后统一显示到物理屏幕上,

    在这里插入图片描述

    GraphicBuffer、BufferQueue

    在这里插入图片描述

    图像流生产者与图像流消费者 的数据传递就是通过 BufferQueue ,里面有很多的GraphicBuffer

    这是生产者消费者模型。 一旦生产者 有新数据,就会通知 SurfaceFlinger 进行消费,最后显示到屏幕

    生产者和消费者可能是在不同的进程,它们的通信不是用Binder,为了高效传输大块数据,使用匿名共享内存,BufferQueue 不会复制缓冲区内容;通过句柄进行传递。

    下图是上图的细化

    接下来具体说明客户端(producer)和服务端SurfaceFlinger(consumer)工作的模式:
    首先这里的buffer是共享缓冲区,故肯定会涉及到互斥锁,所以buffer的状态也会有多种,一般的buffer大致会经过FREE->DEQUEUED->QUEUED->ACQUIRED->FREE这个流程,如下图:
    在这里插入图片描述

    • BufferQueue:Producer向BufferQueue中写数据,Consumer从BufferQueue中读数据。

    • Producer:生产者。因为应用程序不断地刷新UI,从而将产生的显示数据源源不断地写到BufferQueue:Producer中。当Producer需要使用一块buffer时,调用BufferQueue的dequeue函数,获得的buffer就只属于producer,当生产者认为一块buffer已经写入完成后,调用BufferQueue的queue函数,把buffer归还到BufferQueue的队列中。

    • Consumer:消费者 。当生产者准备好数据后,BufferQueue就会调用onFrameAvailable()来通知Consumer进行消费

    图像生产者 例如:相机 HAL 或 OpenGL ES 游戏生成的相机预览。
    图像消费者 例如: SurfaceFlinger 或显示 OpenGL ES 流的另一个应用,如显示相机取景器的相机应用。

    BufferQueue 通常用于渲染到 Surface ,并且与 GL 消费者及其他任务一起消耗内容。 BufferQueue 可以在三种不同的模式下运行:

    • 类同步模式
      默认情况下, BufferQueue 在类同步模式下运行,在该模式下,从生产者进入的每个缓冲区都在消费者那退出。在此模式下不会舍弃任何缓冲区。如果生产者速度太快,创建缓冲区的速度比消耗缓冲区的速度更快,它将阻塞并等待可用的缓冲区。

    • 非阻塞模式
      BufferQueue 还可以在非阻塞模式下运行,在此类情况下,它会生成错误,而不是等待缓冲区。在此模式下也不会舍弃缓冲区。这有助于避免可能不了解图形框架的复杂依赖项的应用软件出现潜在死锁现象。

    • 舍弃模式
      BufferQueue 可以配置为丢弃旧缓冲区,而不是生成错误或进行等待。例如,如果对纹理视图执行 GL 渲染并尽快绘制,则必须丢弃缓冲区。

    EGL OpenGL

    Android 平台图形处理 API 的标准:

    • OpenGL
      是由 SGI 公司开发的一套 3D 图形软件接口标准,由于具有体系结构简单合理、使用方便、与操作平台无关等优点, OpenGL 迅速成为 3D 图形接口的工业标准,并陆续在各种平台上得以实现。

    • OpenGL ES
      是由 khronos 组织根据手持及移动平台的特点,对 OpenGL 3D 图形 API 标准进行裁剪定制而形成的。

    • Vulkan
      是由 khronos 组织在 2016 年正式发布的,是 OpenGL ES 的继任者。 API 是轻量级、更贴近底层硬件 close-to-the-metal 的接口,可使 GPU 驱动软件运用多核与多线程 CPU 性能。

    OpenGL ES 是 Android 绘图 API ,但 OpenGL ES 是平台通用的,与系统无关的,在特定设备上使用需要一个中间层做适配, Android 中这个中间层就是 EGL 。

    FrameBuffer

    Linux 抽象出 FrameBuffer 这个设备来供用户态进程实现直接写屏。 FrameBuffer 机制模仿显卡的功能,是显卡硬件的抽象,可以通过 FrameBuffer 的读写直接对显存进行操作。

    用户可以将 FrameBuffer 看成是显示内存的一个映像,将其映射到进程地址空间之后,就可以直接进行读写操作,而写操作可以立即反应在屏幕上。

    用户不必关心物理显存的位置、换页机制等等具体细节,这些都是由 FrameBuffer 设备驱动来完成的。但 FrameBuffer 本身不具备任何运算数据的能力。 CPU 将运算后的结果放到FrameBuffer,就会显示处理,中间不会对数据做处理。应用程序也可以直接读写FrameBuffer,尽管 FrameBuffer 需要真正的显卡驱动的支持,但所有显示任务都有 CPU 完成,因此 CPU 负担很重。

    帧缓存可以在系统存储器(内存)的任意位置,视频控制器通过访问帧缓存来刷新屏幕。帧缓存也叫刷新缓存 FrameBuffer 或 RefreshBuffer ,这里的帧 Frame 是指整个屏幕范围。帧缓存有个地址,是在内存里。我们通过不停的向 FrameBuffer 中写入数据,显示控制器就自动的从 FrameBuffer 中取数据并显示出来。全部的图形都共享内存中同一个帧缓存。

    FrameBuffer 帧缓冲实际上包括两个不同的方面:

    • Frame :帧,就是指一幅图像,在屏幕上看到的那幅图像就是一帧
    • Buffer :缓冲,就是一段存储区域,可这个区域存储的是帧

    FrameBuffer 就是一个存储图形/图像帧数据的缓冲。Linux 内核提供了统一的 Framebuffer 显示驱动,设备节点 /dev/graphics/fb* 或者 /dev/fb* ,以 fb0 表示第一个 Monitor ,这个虚拟设备将不同硬件厂商实现的真实设备统一在一个框架下,这样应用层就可以通过标准的接口进行图形/图像的输入和输出了:

    Gralloc

    Gralloc 的含义为是 Graphics Alloc 图形分配 。 Android 系统在硬件抽象层中提供了一个 Gralloc 模块,封装了对 Framebuffer 的所有访问操作。

    Gralloc 模块符合 Android 标准的 HAL 架构设计;它分为 fb 和 gralloc 两个设备:前者负责打开内核中的 Framebuffer 、初始化配置,以及提供 post, setSwapInterval 等操作;后者则管理帧缓冲区的分配和释放。上层只能通过 Gralloc 访问帧缓冲区,这样一来就实现了有序的封装保护。

    Gralloc 分配器返回的句柄可以通过 Binder 在进程之间传递。

    Hardware Composer

    HWC(hwcomposer)是Android中进行窗口(Layer)合成和显示的HAL层模块,其实现是特定于设备的,而且通常由显示设备制造商 (OEM)完成,为SurfaceFlinger服务提供硬件支持。

    SurfaceFlinger可以使用OpenGL ES合成Layer,这需要占用并消耗GPU资源。大多数GPU都没有针对图层合成进行优化,当SurfaceFlinger通过GPU合成图层时,应用程序无法使用GPU进行自己的渲染。而HWC通过硬件设备进行图层合成,可以减轻GPU的合成压力。
    显示设备的能力千差万别,很难直接用API表示硬件设备支持合成的Layer数量,Layer是否可以进行旋转和混合模式操作,以及对图层定位和硬件合成的限制等。因此HWC描述上述信息的流程是这样的:

    1. SurfaceFlinger向HWC提供所有Layer的完整列表,让HWC根据其硬件能力,决定如何处理这些Layer。
    2. HWC会为每个Layer标注合成方式,是通过GPU还是通过HWC合成。
    3. SurfaceFlinger负责先把所有注明GPU合成的Layer合成到一个输出Buffer,然后把这个输出Buffer和其他Layer(注明HWC合成的Layer)一起交给HWC,让HWC完成剩余Layer的合成和显示。

    至此,本系列涉及到的内容主要内容,都大概描述了一下,还有一些流程中涉及到的VSync,WMS等,这些不是很影响整体的逻辑,再后面的文章再具体分析。

    请点赞、收藏,感谢大家的支持,欢迎评论区提问、吐槽

    展开全文
  • 图胜前言,本篇文章的目的就是绘制这样的三维图形 二、绘制三维空间曲线 plot3 —— 基本的三维曲线绘制命令 调用格式: plot3(x,y,z) —— x,y,z是长度相同的向量 plot3(X,Y,Z) —— X,Y,Z是维数相同的矩阵 plot...
    展开全文
  • 近来在MATLAB实验的时候遇到个问题,手头上有几张fig图像,为了更好地进行对比,需要合成个fig图形,由于跑出的fig图形耗费了很长的时间,因此不使用hold on 命令,因此就教给大家简单的方法。 1、用MATLAB...
  • MATLAB图形用户界面的个实例(2)

    万次阅读 多人点赞 2016-05-22 14:12:39
    接着上篇MATLAB图形用户界面的个实例(1)我们来做一个图像二值化的个图像处理。用之前的方法添加个“图像处理”菜单,如下: 在其下面添加个“图像二值化”的菜单项,如下: 然后,点击“OK”关闭...
  • 笔试的图形推理题怎么

    千次阅读 2020-09-27 15:50:48
    所谓图形推理:就是每道题给出一套或两套图形,要求考生通过观察分析找出图形排列的规律,选出符合规律的项。 图形推理的出题形式常见的有:条式,两段式和九宫格。 条式常见的观察方式:是从左向右观察,问号...
  • 将matlab中多个m文件的图形在同个小窗口上显示的前提是坐标系相同,下面就简单的介绍: 1、新建个huatu1.m文件,三角函数为例,程序如下: x=0:1:360; y=sind(x); plot(x,y); 2、新建个huatu2.m文件,...
  • 【计算机图形学课程】.MFC基本绘图函数使用方法

    万次阅读 多人点赞 2016-11-16 04:45:51
    这是最近我《计算机图形学》课程实践编程课介绍的相关知识,主要是想通过MFC C++绘图,让学生体会下图形学相关的编程及简单的图形绘制,同时非常佩服学生的想象力,他们得真的不错。希望这篇基础文章对有所帮助...
  • android图形系统详解:Canvas

    万次阅读 多人点赞 2012-03-29 07:12:33
     当写个应用时,恰当的决定图形需求是很重要的.不同的图形任务对应不同的技术.例如,个静态应用的图形和动画的实现肯定与个交互式游戏非常不同.这里,我们将讨论一些在android上绘制图形时的操作以及...
  • 光栅图形学算法(

    千次阅读 2017-07-04 01:14:28
      随着光栅显示器的出现,为了在计算机上处理、显示图形,需要发展一套与之相适应的算法:光栅图形学算法 光栅图形学算法的研究内容 直线段的扫描转换算法 多边形的扫描转换与区域填充算法 裁剪算法 反走样...
  • Qt 图形视图框架 (

    万次阅读 多人点赞 2018-07-12 14:52:16
     图形视图框架提供了个基于图形项的模型视图编程方法,主要由场景、视图和图形项三部分组成,这三部分分别由QGraphicsScene、QGraphicsView和QGraphicsItem这三个类来表示。多个视图可以查看个场景,场景中包含...
  • 图形推理

    千次阅读 2019-05-17 15:41:00
    当线条末端都有黑点时,在第图形个交点处增加个线条,在另个交点处增加个黑点得到图形。      【答案】选C,因为前面四个图形都是对称的,它们分别是数字1,2,3,4的对称图形,下个是5...
  • OpenGL提供系列的三维图形单元供开发者调用。 OpenGL提供系列的图形变换函数。 OpenGL提供系列的外部设备访问函数,使开发者可以方便地访问鼠标、键盘、空间球、数据手套等这种直观的三维图形开发环境体现了...
  • 矢量图形VectorDrawable 与水波图形RippleDrawable一样,矢量...具体到实现上,则需开发者提供个xml格式的矢量图形定义,然后系统根据矢量定义自动计算该图形的绘制区域。因为绘图结果是动态计算得到,所以不管缩放
  • MATLAB图形用户界面的个实例(1)

    万次阅读 多人点赞 2016-05-21 17:38:53
    在MATLAB的命令窗口(Command Window)中运行guide命令,来打开GUIDE界面,如下: ...在Menu Bar中新建个菜单项,名字为“文件”,其他设置请看下图: 在“文件”菜单下添加菜单项:“打开”,“保存
  • 以点为端点,朝两侧发射射线(两根射线平行),如果任意侧的交点个数为偶数个,那么这个点就不在几何体的内部,反之在几何体的内部。 以上图为例,红色的点为需要判断的点,射线组合p,n,q都是合法的检测线(图...
  • 概述  VGA是种学习FPGA最常见的基础实验。虽然现在的显示屏大多已经采用DVI和HDMI方案,但其实...  现在2017年全国大学生电子设计大赛还有不到个月,熟练的使用VGA显示各种图形、文字、波形还是很重要的,而不
  • 在opanlayers4官方API已经有个方法:intersectsCoordinate(coordinate),用于判断个点coordinate是否在闭合图形的内部,返回值为布尔类型的,true表示点在多边形的内部,false表示点不在多边形的内部。...
  • MATLAB图形句柄

    万次阅读 多人点赞 2017-09-02 16:53:21
    图形对象及其句柄 图形对象  MATLAB图形对象包括:  MATLAB每个具体图形一定包括计算机屏幕和图形窗口两个对象。 1、定义  MATLAB在创建每图形对象时,都会给该对象分配个唯一确定的值,称...
  • Java图形界面编程

    万次阅读 多人点赞 2019-02-23 22:23:45
    、Java图形用户界面(gui)介绍 1、Java GUI简介   图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。   Sun已经提供了个跨平台GUI开发工具包AWT...
  • 由于项目需求需要做一个报表,选择FusionCharts作为工具使用。由于以前没有接触过报表,网上也没有比较详细的fusionCharts教程,所以决定好好研究FusionCharts,同时做一个比较简单的教程提供参考。由于能力有限...
  • python图形化进度条 实战(GUI干货)

    千次阅读 2020-02-29 00:48:10
    我刚接触python tkinter图形化界面时也是脸懵逼,当时连多线程、多进程都搞不明白的我又怎搞懂图形化界面。出于对python的热爱,使我一直坚持走到了这步,一路遇到了很多艰险,接下来我把整体的思路和代码实现给...
  • 入门图形学:光照模型(

    千次阅读 2018-07-04 14:49:19
    之前我们了解了渲染管线的流程,基本上知道了图形是如何从串串二进制数据最终变成显示器上的图案的,
  • 首先需要图形库 连接: https://pan.baidu.com/s/1GnGi9VAEbPtqyIDI51g70w 密码:hwyj ps:给懒得上网下的童鞋 得到如下文件 双击运行,得到如下界面,点击与我们VS2017对应的VisualC++2017安装即可 ...
  • 递归画图形

    千次阅读 2016-10-07 23:15:36
    问题讲解首先,我觉得这类题都是个套路,让我们来先认识一下:一般递归画图形这种题目,都是先给你一个原始图形(最简单的),然后让在这个图形的周围画出和它一样的图形,随着层数增加,图形会成指数倍增加,...
  • Qt 之图形视图框架

    万次阅读 多人点赞 2016-07-20 16:59:13
    简述图形视图(Graphics View)提供了个用于管理和交互大量自定义的二维图形对象(Item),以及个支持缩放和旋转操作的视图部件用于显示这些视图项。框架包括个事件传播架构,支持scene中的items进行精确的双...
  • 【GLSL教程】(图形流水线

    万次阅读 多人点赞 2011-07-08 22:07:31
    这是一些列来自lighthouse3d的GLSL教程,非常适合入门。...流水线概述下图描述了个简化的图形处理流水线,虽然简略但仍然可以展示着色器编程(shader programming)的一些重要概念。个固定流水线包括
  • 图形对象 Matlab中,把用于数据可视化和界面...句柄是图形对象的唯一标识符,不同对象的句柄不可 重复和混淆 计算机屏幕作为根对象(root)由 系统自动建立,其句柄值为0。而图形窗口对象(figure)的句柄值为一正整数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 496,815
精华内容 198,726
关键字:

做一做你能得到哪些图形