屏幕与2D显示

在这里插入图片描述
注意是分开的,因为当时文本任务和图形任务是分开的。
早起屏幕无法显示清晰的文字,而打印纸上有更高的对比度和分辨率。
早期屏幕的典型用途是跟踪程序的运行情况,比如寄存器的值,如果用打印机一遍又一遍打印是没有意义的,另一方面屏幕刷新很快,对零时值简直完美

阴极射线管CRT

原理是把电子发射到有磷光体图层的屏幕上
在这里插入图片描述
由于电子是带电粒子,路径可以用磁场控制。屏幕内用板子或线圈把电子引导到想要的位置。
既然这样有两种方式绘制图形
1引导电子束描绘出形状,这叫矢量扫描
在这里插入图片描述
2按固定路径,一行行来,从上向下,从左到右,不断重复
在这里插入图片描述
这叫光栅扫描,用这种方法,可以用很多小线段绘制形状甚至文字,最后由于技术发展,我们终于可以在屏幕上显示清晰的点,叫像素
在这里插入图片描述
这与过去显示器有极大的不同名单LCD也用光栅扫描,每秒更新多次,像素里红绿蓝的颜色

显卡

早期很多计算机不用像素,不是技术做不到,而是像素占太多内存。
200像素*200像素要40000像素,哪怕只用一个bit表示,代表黑或白色连灰度也没有,会占40000bit内存,比pdp-1全部内存一半还多。
在这里插入图片描述
如果每个字符用八位数表示,比如ASCII,总共才16000位,这种大小更合适。为此计算机需要额外硬件,从内存读取字符,转换成光栅图形,这个硬件叫字符生成器,基本算第一代显卡。它内部只有一块只读存储器,简称ROM,存着每个字符的图形,叫点阵图案。
如果图形卡看到一个8位2进制,发现是字母k,那么它会把字母k的点阵图案光栅扫描显示到屏幕适当的位置。
为了显示,字符生成器会访问内存中一块特殊的区域转为图形保留,叫屏幕缓存区。 程序想显示文字时,修改这块区域内的值就好了。这个方案内存用的少得多,但意味着只能画字符到屏幕上。
字符集实在太少了,做不了什么复杂的事,因此对ASCII进行扩展,加新字符
在这里插入图片描述
某些系统上可以用额外的bit定义字体颜色和背景颜色
在这里插入图片描述
字符生成器是一种省内存的技巧,但没有办法绘制任何图形。为了绘制图形又不占用大量的内存,科学教用了CRT上的矢量方法。
概念非常简单,所有东西都由线组成,没有文字这回事,如果要显示文字,就用线条画出来。只有线条没有别的。
案例

在这里插入图片描述
我们可以画形状,用如下矢量命令。这些命令来自Vectrex,一个早期矢量显示系统。
1首先reset,这个命令清空屏幕,电子枪的绘图点移动到了坐标(0,0)并把线条亮度设为0.
2接着移动到50 50并把亮度设为100。
现在亮度提高,移动到100 50 然后 60 75 然后 50 50
3最后把强度设为0
在这里插入图片描述
我们画了一个三角形。
这些命令占了160bit,比存一个庞大的像素矩阵好。
就像之前通过字符生成器生成字符,这些矢量指令也存在内存中,通过矢量图形卡画到屏幕上。数百个命令可以按顺序存在屏幕缓冲区。画出复杂图形,全是线段组成的。
由于这些矢量都在内存中,程序可以更新这些值。
让图形随时间变化-动画。
最早用真正像素的计算机和显示器出现于1960年代末,内存中的1位对应屏幕上的像素,这叫位图显示。
图形可以想象为一个巨大的像素矩阵。
计算机把像素数据存在内存中一个特殊区域叫帧缓冲区。 早期这些数据存在内存里,后来存在告诉视频内存里,简称VRAM,VRAM在显卡上,这样访问更快。