前面我们闲聊谈到作为一个准备长期坚持在研发道路上的程序员,怎么样才能保证自己所学的知识属于持久长存的,而不至于在新老交替的时候淘汰掉。那么什么知识属于保质期长久的呢?其中就谈到了理论,也就是也就是原理,或者说事物的本质。图形学也是遵循其原理衍生而来的,从这里开始我们就来学习理解图形学原理。

这里先说些历史事件,也就是图形学起源。在1950年,第一台图形(阴极射线管CRT)显示器被制作出来,虽然当时只能用来显示简单的图形,但这为图形学奠定了基础理论。在1962年,一篇人机交通讯的图形系统的论文首次使用了computer graphics也就是计算机图形学这个名词并且提出这个研究领域。在1970年,先后有研究者提出光反射模型和漫反射模型插值等思想,随后提出了著名的冯(phong)光照模型。在1980年,一个接一个图形学理论模型被提出,并推出了光线追踪的真实感图形显示算法范例,随后随着工业大爆炸,计算机cpu gpu的处理速度越来越快,计算机图形学广泛应用于全世界各个领域。

上面就是一些简短的计算机图形学发展史,可以看出虽然今年已经是2018年了,我们依旧在学习半个多世纪前就发展出来的理论知识,图形学理论知识是不是够持久够保值!甚至未来百年千年一直都需要从1950年就奠定好的技术,如此一来还有什么理由阻止我们学习图形学原理。

我们思考一下,每天对着电脑玩游戏,游戏中那生动的三维画面和各种炫酷的特效是怎么来的呢?我觉得凡是有求知欲且喜欢追根究底的人,特别我们本身就是做游戏开发的,肯定非常想知道的!就好比我是一个名厨,有一天来到另一个城市旅游,途经一个饭店吃饭,突然发现一道菜非常好吃,惊为天人,那么我肯定就想去后厨看一下这道菜的每一个制作工序和配料,希望一个不落的在脑海中记录下来,然后回去尝试做出同样好吃的菜。(因为本人只喜欢玩游戏和吃美食,所以打比喻也就只能这么庸俗了,见谅)

首先看下计算机图形系统的硬件组成部分(顺便说一下作为一个“垃圾佬”,“飞线”主板,“打孔”cpu,铁片机箱,fat crt显示器,机械轴,滚轮光电激光鼠标,电阻电容写字板,wacom数位板都有用过,显示排线,a/i cpu,ddr234内存,a/n显卡,风冷水冷,塔式双路,刀片双路,多屏拼接等都摆弄过,所以简短聊一下图形组成硬件以便大家心中有个实实在在的实物结构组成)。

图形系统组成硬件中最让人“一目了然”的大概就是显示器了,最早的大规模民用显示器大概就是小时候家里的那种大屁股电视机了,老式电脑也是大屁股显示器,学名阴极射线管(cathode ray tube)显示器,工作原理就是由显示器内部靠后的电子枪不停发射电子束(阴极射线,这个规定的原子核带正电,电子带负电)通过聚焦系统和偏转系统,打到涂有荧光物质的屏幕上,电子打到荧光物上会显示一个小亮点,然后很快消失,所以电子枪一直不停的发射电子束就能保证亮点的持续性,也就是画面的持续性,这种显示器也就是刷新式CRT显示器,电子枪发射电子的频率也就是刷新率。通过电子束的能量转移到荧光屏上形成亮点,通过逐行逐列的扫描发射电子束,就形成一个由亮点组成的矩阵,因为亮点的能量存在衰减周期,所以亮点的亮度就能划分出亮度level,从而显示特定的画面,同时亮点矩阵的行和列的数量也被标记为分辨率,大概示意图如下:

可以看得出来,电子束被聚焦后经过电磁圈的偏移,就能按照规定路线打在荧光屏上形成亮点。当然现在早就不用这种大屁股显示器了,首先电子枪发射电子,一定程度上会对人体照成辐射伤害,强力电子流可能打断人体碱基对中的氢键造成dna螺旋双链解旋复制的过程中出现错误(物理生物学上的知识可以了解一下),然后那种电视机或者显示器太大太重了,所以后来液晶显示技术发展出来以后,CRT显示器立马就走进了历史的坟场,LCD液晶显示技术的原理也生产出由液晶材料(能激发显示红黄蓝三原色)组成的点阵面板,后面又有LED发光二极管显示技术,原理就是生产能显示三原色的发光二极管的点阵面板,当然还有各种其他的显示技术就不一一说了(有兴趣的百度google),不过目的都是为了组成一个能显示色阶、亮阶、三原色的“像素”点阵面板来显示图像。

还是回到CRT显示器上来学习,首先我们构建完一个由亮点(或者说像素)组成的矩阵面板,希望这个矩阵面板显示我们需要的图像,想象一下大阅兵的军人方阵,军人们有规律的依次完成特定的动作,那么从天上的直升机拍摄角度来看就形成了特定的画面,矩阵面板也是一样的,CRT显示器中有光栅扫描系统,可以使电子束横向扫描屏幕,一次一行,由顶至底,依次进行的每一行我们称为一个行扫描,当电子束进行行扫描并且从顶至底扫描时,电子束强度不断变化,从而使不同亮阶的亮点组成一个图像,控制图像亮点不同亮阶的数据保存在称为刷新缓存(refresh buffer)或帧缓存(frame buffer)的储存器中,同时我们把亮点给了一个学名称为像素(pixel),因为刷新缓存用来储存屏幕颜色值,所以也称为颜色缓存(color buffer),除了颜色以外,像素的其他信息也储存在缓存中,为了方便,我们可以把这些缓存统称为“帧缓存”。

光栅扫描系统可显示的颜色或者灰度level依赖于每个像素对应的帧缓存的位数,比如黑白CRT显示器的荧光物质,只能让像素点亮或者熄灭,那么一个像素只需要我们用一个bit位标记0为熄灭1为点亮就行了,彩色CRT显示器的荧光物质就有24位的颜色或者灰度level,那么当我们在分辨率1024*1024的24位彩色CRT上显示一副画面,就需要高达24*1024*1024 bit的刷新缓存,每个像素的位数有时也称为缓存深度(depth)或者位平面(bitplane)数。

ps:有逐行扫描的显示器那么就存在非逐行的随机扫描显示器,比如很老式雷达的波形显示器,有兴趣的百度google一下。

这里稍微详细介绍一下光栅扫描系统,如下图:

其中显示处理器的主要任务就是将程序给出的图形数字化一组像素强度值,并且存放在帧缓存中,这个数字转换过程叫扫描转换 ,扫描转换将给定直线和其他几何图形转换成一组与屏幕像素位置对应的离散点,例如一条斜线经过扫描转换成离散点显示在像素矩阵中的图像如下:

其中铅笔部分就是经过转换后需要点亮的像素点,离散后的点亮的像素点,在人眼观察看来就是一根斜线。这个叫做光栅化。这个应该很好理解,因为屏幕的像素矩阵只是横竖连续的并不是万向连续的,想要在显示特殊的图形,就需要像微积分中计算不规则图形面积一样划分“方格”填充,达到一种斜向连续的“错觉”,这样就画出了斜线。

显示处理器也能执行其他附加操作,比如生成虚线点线或实线,显示彩色区域以及对显示对象执行某些变换和管理。顺带说一下,为了减少光栅系统对储存量的需求,使用了将帧缓存组织成链表且强度信息进行编码的方式,一种方式是将每行扫描线作为一组整数对来储存,每对中的一个整数指示强度值,另一个整数设定该扫描线上具有此强度的相邻像素值,这种技术称为行程长度编码,如果图形几乎都是有每个单色的长行程构成的,那么可以大量节省存储空间。当像素强度变化为线性时,也能采用类似的方法。另一种方法就是光栅按一块一块矩形区域进行编码,也成单元编码,行程编码的缺点是强度的改变难以记录,而当行程减小时,储存量急剧增加,而且当存在很多短行程时,显示控制器处理光栅是困难的,由于存储器的成本急剧下降,帧缓存大小已经不是主要考虑因素。

看到这里大家对显示处理器有印象没?其实我们日常使用电脑,这个“显示处理器”就是“显卡”,下一篇我们就来详细学习一下“显卡”的原理。

入门图形学:图形学原理(一)相关推荐

  1. Kubernetes入门——Kubernetes工作原理及使用

    作者简介: 星龙 百度基础架构部研发工程师 负责混部调度系统研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes工作原理』梳理. 视 ...

  2. shell编程入门 linux解释器原理,Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对.doc...

    Shell编程入门Linux解释器原理详细介绍 使用Shell进行工作的人们对 Shell编程入门:Linux解释器原理详细介绍使用Shell进行工作的人们对Unix/Linux下的Shell编程都很 ...

  3. 网络协议从入门到底层原理(11)网络爬虫、无线网络、HTTP缓存、即时通信、流媒体

    补充知识 网络爬虫 网络爬虫的简易实例 robots.txt 无线网络 HTTP 缓存(Cache) 缓存 - 响应头 缓存 - 请求头 缓存的使用流程 即时通信(IM) XMPP MQTT 流媒体 ...

  4. 网络协议从入门到底层原理(10)WebSocket、WebService、RESTful、HTTPDNS、FTP文件传输协议、邮件相关协议、IPv6

    其他协议 WebSocket WebSocket - 建立连接 WebService RESTful HTTPDNS FTP文件传输协议 邮件相关的协议(SMTP.POP.IMAP) POP vs I ...

  5. 网络协议从入门到底层原理(9)HTTP/1.1的升级改进(HTTP/2、HTTP/3)

    HTTP的升级改进 HTTP/1.1协议的不足 SPDY 协议 HTTP/2 HTTP/2的特性 - 二进制格式 HTTP/2基本概念 - 数据流.消息.帧 HTTP/2的特性 - 多路复用(Mult ...

  6. 网络协议从入门到底层原理(8)HTTPS(成本、通信过程、TLS1.2的连接,配置服务器HTTPS)

    HTTPS SSL / TLS OpenSSL HTTPS的成本 HTTPS的通信过程 TLS 1.2 的连接(ECDHE密钥交换算法) ① Client Hello ② Server Hello ③ ...

  7. 网络协议从入门到底层原理(7)网络安全 - 常见攻击、单向散列函数、对称加密、非对称加密、混合密码系统、数字签名、证书

    网络安全 网络层 - ARP欺骗 DoS.DDoS 介绍与防御 传输层 - SYN洪水攻击(SYN flooding attack) 传输层 - LAND攻击 应用层 - DNS劫持.HTTP劫持 H ...

  8. 网络协议从入门到底层原理(6)应用层 - 域名、DNS、DHCP、HTTP(ABNF、HTTP报文格式、请求方法、头部字段、状态码、跨域)、代理、CDN

    应用层 域名( Domain Name)- 顶级域名.二级域名 DNS - DNS服务器.常用命令 DHCP(DISCOVER.OFFER.REQUEST.ACKNOWLEDGE) HTTP HTTP ...

  9. 网络协议从入门到底层原理(5)传输层(UDP、TCP - 可靠传输、流量控制、拥塞控制、建立连接、释放连接)

    传输层( Transport) 传输层( Transport) UDP 协议(数据格式.检验和) 端口(Port) TCP TCP - 数据偏移.保留 TCP - 检验和( CheckSum) TCP ...

  10. 网络协议从入门到底层原理(3)网络互联模型、物理层、数据链路层(CSMA/CD协议、Ethernet V2帧、PPP协议)

    网络协议从入门到底层原理 网络互联模型(了解请求过程.网络分层) 物理层(Physical) 数字信号.模拟信号 数据通信模型 信道(单工.半双工.全双工) 数据链路层(Data Link) 封装成帧 ...

最新文章

  1. 作业(二)—python实现wc命令
  2. 情感分析的现代方法(包含word2vec Doc2Vec)
  3. 深度学习:从MLP到朴素的神经网络
  4. POJ 1182 食物链,并查集的拓展
  5. 重磅!新增一个假期!此地已正式发文!
  6. 1 FI配置-企业结构-定义-创建集团公司(Company)
  7. zynq配置成jtag模式_zynq 7Z010的启动模式配置
  8. UI设计中配色专辑素材|做图配色,一键搞定
  9. bat 启动 不弹出对话框_跳过网易启动器用Steam启动逆水寒
  10. 三菱plc pwm指令_三菱PLC初学者只要解决这50个问题,那你就觉得很容易上手?
  11. Python爬取QQ音乐并下载
  12. 计算机中存储、网络传输计量单位
  13. ssh 远程执行脚本(自己总结)
  14. 游戏建模:场景模型制作所需软件科普,让建模更简单!
  15. 课代表:ChatGPT及大模型专题研讨会
  16. switch基本用法
  17. 七、CISSP 认证考试指南(AIO)第 7 版术语表
  18. 2021-10-19大数据学习日志——数据埋点+网络爬虫——前端开发入门
  19. cmnet 和 cmwap 收费等区别
  20. 因签署Android独家协议排除竞争对手 谷歌在印度被罚款1.62亿美元

热门文章

  1. H264/AVC视频解码时AVC1和H264的区别
  2. [libgdx游戏开发教程]使用Libgdx进行游戏开发(7)-屏幕布局的最佳实践
  3. 内部排序与外部排序简单比较
  4. no persistent classes found for query class: from xxxx解决办法
  5. VUE 如何使用3DES加密
  6. [Unity3D]U3D开发项目总结(转)
  7. 越读越有味的句子 绝对经典语录 人生感悟格言(转)
  8. Kamiya丨Kamiya艾美捷抗FLAG多克隆说明书
  9. 用机器学习创建《哈利波特》的QuoteBot
  10. 2020 超分辨率技术发展趋势