计算机速成课Crash Course - 23. 屏幕 2D 图形显示

今天继续计算机速成课Crash Course的系列讲解。

更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

计算机速成课Crash Course - 23. 屏幕& 2D 图形显示 (qq.com)

23. 屏幕& 2D 图形显示

这台 1960 年的 PDP-1,是一个早期图形计算机的好例子,你可以看到 左边是柜子大小的电脑,中间是电传打字机,右边是一个圆形的屏幕,注意它们是分开的。

图片

因为当时文本任务和图形任务是分开的。

事实上,早期的屏幕无法显示清晰的文字,而打印到纸上,有更高的对比度和分辨率。

早期屏幕的典型用途,是跟踪程序的运行情况,比如寄存器的值。

图片

如果用打印机,一遍又一遍打印出来没有意义,不仅费纸而且慢,另一方面,屏幕更新很快,对临时值简直完美。

但屏幕很少用于输出计算结果,结果一般都打印到纸上,或其它更永久的东西上。

但屏幕超有用,到1960年代,人们开始用屏幕做很多酷炫的事情,几十年间出现了很多显示技术。

但最早最有影响力的是 阴极射线管(CRT),原理是把电子发射到 有磷光体涂层的屏幕上,当电子撞击涂层时,会发光几分之一秒,由于电子是带电粒子,路径可以用磁场控制,屏幕内用板子或线圈,把电子引导到想要的位置,上下左右都行。

图片

既然可以这样控制,有 2 种方法绘制图形:1. 引导电子束描绘出形状,这叫"矢量扫描"。因为发光只持续一小会儿,如果重复得足够快 可以得到清晰的图像。

2. 按固定路径,一行行来,从上向下,从左到右,不断重复,只在特定的点打开电子束,以此绘制图形,这叫 "光栅扫描"。用这种方法,可以用很多小线段绘制形状,甚至文字。

图片

最后,因为显示技术的发展,我们终于可以在屏幕上显示清晰的点,叫"像素"。

液晶显示器,简称 LCD,和以前的技术相当不同,但 LCD 也用光栅扫描,每秒更新多次 像素里红绿蓝的颜色。

图片

有趣的是,很多早期计算机不用像素,不是技术做不到,而是因为像素占太多内存。

200像素×200像素的图像,有 40,000 个像素,哪怕每个像素只用一个 bit 表示,代表黑色或白色,连灰度都没有!会占 40,000 bit 内存,比 PDP-1 全部内存的一半还多。

所以计算机科学家和工程师,得想一些技巧来渲染图形,等内存发展到足够用,所以早期计算机不存大量像素值,而是存符号,80x25个符号最典型,总共 2000 个字符。

图片

如果每个字符用 8 位表示,比如用 ASCII,总共才 16000 位,这种大小更合理。

为此,计算机需要额外硬件来从内存读取字符,转换成光栅图形,这样才能显示到屏幕上,这个硬件叫 "字符生成器",基本算是第一代显卡,它内部有一小块只读存储器,简称 ROM,存着每个字符的图形,叫"点阵图案"。

如果图形卡看到一个 8 位二进制,发现是字母 K,那么会把字母 K 的点阵图案,光栅扫描显示到屏幕的适当位置。

为了显示,"字符生成器" 会访问内存中一块特殊区域,这块区域专为图形保留,叫 屏幕缓冲区,程序想显示文字时,修改这块区域里的值就行,这个方案用的内存少得多,但也意味着只能画字符到屏幕上。

即使有这样限制,人们用 ASCII 艺术发挥了很多创意!

图片

也有人用字符模仿图形界面,用下划线和加号来画盒子,线,和其他简单形状。但字符集实在太小,做不了什么复杂的事,因此对 ASCII 进行了各种扩展,加新字符。

图片

比如上图的 IBM CP437 字符集,用于 DOS。某些系统上,可以用额外的 bit 定义字体颜色和背景颜色,做出这样的 DOS 界面,这界面只用了刚刚提到的字符集。

图片

字符生成器是一种省内存的技巧,但没办法绘制任意形状,绘制任意形状很重要,因为电路设计,建筑平面图,地图,好多东西都不是文字!

为了绘制任意形状,同时不吃掉所有内存,计算机科学家用 CRT 上的"矢量模式",概念非常简单:所有东西都由线组成,没有文字这回事,如果要显示文字,就用线条画出来,只有线条,没有别的。

明白了吗?好,我们举个实例吧。

假设这个视频是一个 笛卡尔平面,200个单位宽,100个单位高,原点 (0,0) 在左上角。

我们可以画形状,用如下矢量命令:这些命令来自 Vectrex,一个早期矢量显示系统。

首先,reset ,这个命令会清空屏幕,把电子枪的绘图点移动到坐标 (0,0),并把线的亮度设为 0。

MOVE_TO 50 50,把绘图点移动到坐标 (50,50),INTENSITY 100 把强度设为 100。

图片

现在亮度提高了,移动到 (100,50),然后 (60,75) 然后 (50,50),最后把强度设回 0。

酷,我们画了一个三角形!

图片

这些命令占 160 bit,比存一个庞大的像素矩阵更好,就像之前的"字符生成器",把内存里的字符转成图形一样。

这些矢量指令也存在内存中,通过矢量图形卡画到屏幕上数百个命令可以按序存在屏幕缓冲区,画出复杂图形,全是线段组成的!

由于这些矢量都在内存中,程序可以更新这些值,让图形随时间变化 - 动画!

最早的电子游戏之一, Spacewar!是 1962 年在 PDP-1 上用矢量图形制作的,它启发了许多后来的游戏,比如 爆破彗星(Asteroids),甚至第一个商业街机游戏:太空大战。

图片

1962 年是一个大里程碑,Sketchpad 诞生,一个交互式图形界面,用途是计算机辅助设计 (CAD),它被广泛认为是第一个完整的图形程序,发明人 伊万·萨瑟兰 后来因此获得图灵奖。

图片

为了与图形界面交互,Sketchpad 用了当时发明不久的输入设备 光笔,就是一个有线连着电脑的触控笔,笔尖用光线传感器,可以检测到显示器刷新,通过判断刷新时间,电脑可以知道笔的位置。

有了光笔和各种按钮,用户可以画线和其他简单形状,Sketchpad 可以让线条完美平行,长度相同,完美垂直90度,甚至动态缩放,这些在纸上很费力,在计算机上非常简单!

用户还可以保存设计结果,方便以后再次使用,甚至和其他人分享,你可以有一整个库,里面有电子元件和家具之类的,可以直接拖进来用。

图片

从如今的角度来看好像很普通,但在1962年,计算机还是吃纸带的大怪兽,有柜子般大小,Sketchpad 和光笔让人大开眼界,它们代表了人机交互方式的关键转折点,电脑不再是关在门后负责算数的机器了,可以当助手,帮人类做事。

图片

最早用真正像素的计算机和显示器,出现于 1960 年代末,内存中的位(Bit) 对应屏幕上的像素,这叫 位图显示。

现在我们可以绘制任意图形了,你可以把图形想成一个巨大像素值矩阵,就像之前,计算机把像素数据存在内存中一个特殊区域,叫"帧缓冲区"。

早期时,这些数据存在内存里,后来存在高速视频内存里,简称 VRAM,VRAM 在显卡上,这样访问更快,如今就是这样做的。

在 8 位灰度屏幕上,我们可用的颜色范围是 0 强度(黑色)到 255 强度(白色),其实更像绿色或橙色,因为许多早期显示器不能显示白色。

我们假设 这个视频在低分辨率的位图屏幕上,分辨率 60x35像素。如果我们想把 (10,10) 的像素设为白色,可以用这样的代码。

图片

如果想画一条线  假设从(30,0)到(30,35),可以用这样一个循环,把整列像素变成白色。

图片

如果想画更复杂的图形,比如矩形,那么需要四个值:1. 起始点X坐标 2. 起始点Y坐标 3. 宽度 4. 高度。

目前只试了白色,这次画矩形试下灰色,灰色介于0到255中间,所以我们用 127 (255/2=127.5)。

然后用两个循环,一个套另一个,这样外部每跑一次,内部会循环多次,可以画一个矩形。

图片

计算机绘图时会用指定的颜色 127,我们来包装成 "画矩形函数",就像这样:

假设要在屏幕的另一边 画第二个矩形,这次可能是黑色矩形,可以直接调用 "画矩形函数", 超棒!

就像之前说的其他方案,程序可以操纵"帧缓冲区"中的像素数据,实现交互式图形。

当然,程序员不会浪费时间从零写绘图函数,而是用预先写好的函数来做,画直线,曲线,图形,文字等。

图片

一层新抽象!

位图的灵活性,为交互式开启了全新可能,但它的高昂成本持续了十几年,上集提到,1971 年整个美国也只有大约 7 万个电传打字机和 7 万个终端,令人惊讶的是,只有大约 1000 台电脑有交互式图形屏幕。

这可不多!

Sketchpad 和 太空大战 这样的先驱,推动了图形界面发展,帮助普及了计算机显示器。

由此,图形界面的曙光初现,接下来讲图形界面。下节课见。


以上内容就是 23. 屏幕& 2D 图形显示 的内容,感兴趣的同学记得点赞、关注、转发、收藏哦!

我会不定期发布课程的讲解!

更多技术文章,全网首发公众号 “摸鱼IT” 锁定 -上午11点 - ,感谢大家关注、转发、点赞!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/347710.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Go 快速入门】安装 Go 语言 | 开发工具 Goland | 第一个 Go 语言程序

文章目录 前言安装 Go 语言编译器 Goland运行 Go 程序补充 前言 本系列教程,目的是帮助一个有其他编程基础的 Go 语言小白快速入门 Go 语言,而非启发式学习。每篇幅保证不说废话,尽可能精炼总结,为上手后续的 Go 相关项目打下基础…

目标检测数据集 - 抽烟检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍:抽烟检测数据集,真实合成场景高质量图片数据,涉及场景丰富,比如街景抽烟、写字楼抽烟、办公室抽烟、楼道抽烟、遮挡行人抽烟、严重遮挡行人抽烟数据;适用实际项目应用:公共场所监控或室内监控场…

2024年,每个人都应该知道的10个免费学习资源网站

在这个数字化的时代,有着许多宝贵的网络资源,提供了无限的学习机会,为每个人敞开了免费获取知识的大门。但很多人不知道它们的存在。今天分享10个免费且丰富的学习资源网站,希望对大家所有帮助。 1.freeCodeCamp 您可以免费学习…

<网络安全>《2 国内主要企业网络安全公司概览(二)》

4 北京天融信科技有限公司(简称天融信) 信息内容LOGO成立日期创始于1995年总部北京市海淀区上地东路1号院3号楼北侧301室背景民营企业是否上市天融信[002212]A股市值99亿主要产品网络安全大数据云服务员工规模6000多人简介天融信科技集团(证券代码:0022…

支持向量机(Support Vector Machines)(需要优化)

1.优化目标 一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine)。与逻辑回归和神经网络相比,支持向量机,或者简称 SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大…

利用C语言实例描述程序中的内聚和耦合

编程时,我们讲究的是高内聚低耦合,在协同开发、代码移植、维护等环节都起到很重要的作用。 一、原理篇 而低耦合,是指模块之间尽可能的使其独立存在,模块之间不产生联系不可能,但模块与模块之间的接口应该尽量少而简单…

从零学习Hession RPC

为什么学习Hessian RPC? 存粹的RPC,只解决PRC的四个核心问题(1.网络通信2.协议 3.序列化 4.代理)Java写的HessianRPC落伍了,但是它的序列化方式还保存着,被Dubbo(Hessian Lite)使用。 被落伍,只…

浅谈DNS的工作原理及其作用

DNS,全称为Domain Name System,即域名系统,是一种用于将域名和IP地址相互映射的分布式数据库系统。它将可读的域名转换为对应的IP地址,使得用户可以更方便地通过域名来访问网络上的资源。今天锐成就简单探讨一下DNS的工作原理及其…

Android网络状态差的处理方案

1,在没有网络的情况下的处理 相信大家面对这个情况处理起来是毫无压力的. //有网 if (Utils.isNetworkConnected(this)) {loadingView.setVisibility(View.VISIBLE);//显示正在加载//联网获取数据getDataFromNet(); } else {//没网直接显示本地数据.showView();Toast.makeTex…

Ubuntu20.04 安装 ROS noetic + MAVROS

本文在 AlphaCatOvO【ROS】在 Ubuntu 20.04 安装 ROS 的详细教程 基础上,根据实际安装经验,稍微进行补充。 一、安装Ubuntu20.04 假设已经正确安装。 二、安装 ROS noetic 2.1 换源 执行 sudo apt update sudo mv /etc/apt/sources.list /etc/apt/…

C++代码入门07 函数调用语句

图源:文心一言 听课笔记简单整理,包括以下内容”🐋3.2 二进制转十进制、🐋3.3 数学公式1:用反切函数表示pi、🐋3.4 判断回文数、🐋3.5 数学公式2:分段函数、🐋3.6 扔骰子…

容器安全工具

容器安全工具是用于保护和监控容器环境安全的工具。它们提供了一系列功能,包括容器镜像的漏洞扫描、运行时监控、事件日志记录、访问控制、运行权限管理等。以下是一些常见的容器安全工具: 1. Docker Bench Security:用于检查Docker环境配置的安全性,提供一些最佳实践建议…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第二天-ARM汇编(物联技术666)

链接:https://pan.baidu.com/s/1bG0tuVaACATvjLwD05j1FQ?pwd1688 提取码:1688 上午:ARM编程模型 下午:常用ARM指令 教学内容: 1、ARM数据类型 字节(Byte):在ARM体系结构及常见的…

无限可能!安全狗入选“潜力十强企业”

近日,等级保护测评公布了“2023年网络安全优秀评选”活动评选结果。 作为国内云原生安全领导厂商,安全狗凭借突出的综合实力,荣获“潜力十强企业”称号。 厦门服云信息科技有限公司(品牌名:安全狗)创办于…

redis-发布缓存

一.redis的发布订阅 什么 是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式:发送者 (pub) 发送消息,订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 Redis的发布和订阅 客户端订阅频道发布的消息 频道发布消息 订阅者就可…

信创UOS

信创UOS 国产操作系统 文章目录 信创UOS前言一、信创UOS是什么二、信创UOS的特点与局限性1. 信创UOS的特点2. 信创UOS的局限性三、信创UOS常见故障总结前言 信创UOS(Union Operating System)是由中国软件与技术服务股份有限公司(CS&S)开发的一款操作系统。它是中国政府…

SpringCloudFunction漏洞分析

前言 SpringCloudFunction是SpringBoot开发的一个Servless中间件&#xff08;FAAS&#xff09;&#xff0c;支持基于SpEL的函数式动态路由。在特定配置下&#xff0c;3 < 版本 < 3.2.2&#xff08; commit dc5128b 之前&#xff09;存在SpEL表达式执行导致的RCE。 补丁分…

卸载软件Geek Uninstaller,MySQl安装不成功

最近刷最右的时候&#xff0c;看到两个帖子都是MySQl安装过程总是出现问题。大概两年前我也遇到了这个问题&#xff0c;推荐一款软件。 是因为在安装的过程之中&#xff0c;出现了问题。然后你再进行安装的时候&#xff0c;没有完全将原来安装的软件卸载掉&#xff0c;导致有注…

详解SpringCloud微服务技术栈:ElasticSearch实践1——RestClient操作索引库与文档

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;ElasticSearch原理精讲、安装、实践 &#x1f4da;订阅专栏&#xff1a;微服务技术全家…

多场景建模:阿里MARIA

Multi-scenario ranking framework with adaptmulti-scenario ranking framework with adaptive feature learning 背景 多模态搜索场景支持用户通过不同模态的Query来表达多样的搜索需求。 拍照搜索&#xff08;Visual Search&#xff09;&#xff1a;实拍图作为query相似商…
最新文章