CrashCourseComputerScience23屏幕与 2D 图形显示

89 阅读3分钟

屏幕与 2D 图形显示

1.Early Computer Graphics

PDP-1 计算机,text-based 和 graphical tasks 分离,显示的分辨率很低,图像显示通常用来跟踪计算机运行情况,例如显示寄存器值

image.png

2.Display Technologies

  • 阴极射线管 Cathode Ray Tube (CRT)
    电子发生到有磷光体图层的屏幕上,用磁场控制电子的路径。屏幕内用线圈将电子引导到目标位置
    绘图方式:矢量扫描 Vector Scanning(发光只能持续一小会,如果刷新足够快就可以得到清晰的图像) 和 光栅扫描 Raster Scanning

image.png

  • 液晶显示器 Liquid Crystal Display (LCD)
    使用像素方式显示 Pixel,每秒更新多次红绿蓝 pixcels,使用光栅扫描方式

早期无法使用这种方式的原因是占用过多内存,200 * 200 image 有 40000 pixcels,每个 pixcel 即使是黑白的用 1 byte 存储,需要 40KB 内存,是 PDP-1 计算机内存的一半以上

3.Render Graphics

由于内存的稀缺性,计算机科学家和工程师发明了很多渲染图形的技巧来节省内存

  • 字符生成器 Character Generator
    不存储大量像素值,而是存符号,80*25 个符号是最流行的,2000 个符号在 ASCII 映射下总共 16000 位。字符生成器用来在中间做转换,基本算作第一代显卡 graphic cards。内部有一小块只读存储器,ROM Read-only Memory,存着的每个字符的图形叫点阵图案 dot matrix pattern,为了显示字符生成器会访问内存中一块特殊区域,叫屏幕缓冲区 screen buffer。这种方式只能通过字符来显示图案,今天也非常常见,例如命令行界面。为了扩展显示功能,ASCII 码被扩充,例如用于 DOS 的 IBM CP437 字符集,某些系统可以用额外的 bit 定义字体颜色和背景颜色。字符生成器显著节省了内存,但没有办法绘制任意形状。
  • 矢量命令绘图 Vector Command Plotting
    所有的字符本质都是线,但字符无法表示复杂的图形,因此可以用矢量绘图来显示。例如早期矢量显示系统 Vectrex,更新对应的内存值时就可以制作动画。
# 画一个三角形
RESET 
MOVE_TO 50 50
INSENSITY 100
MOVE_TO 100 50
MOVE_TO 60 75
MOVE_TO 50 50
INSENSITY 0

这种方式衍生出最早的游戏之一,1962 在 PDP-1 上的 Spacewar。
第一个商业街机游戏 Computer Space,1971,Nolan Bushnell,Atari 创始人,后来创造了 Pong。

  • 交互式图形界面,Sketchpad
    1962 发明,用来计算机辅助设计 CAD,使用了光笔 Light Pen,一个有线连着电脑的触控笔。CAD 能够便捷的帮助设计师绘制平行线和其他常用图形,并能快捷的调整方向长度等参数,并能与其他人分享,甚至能构建库来存放常用电子元件、家具等不同行业的基本图形。
    跨时代的变革,展现了计算机可以如何帮助人类,而不仅仅是做数学计算。
  • 像素显示器 Bitmap Displays 1960s 末期
    内存中的 bit 直接对应屏幕上的像素,可以显示任意图形,通过直接更新内存值来控制显示,图形是一个巨大的像素值矩阵,被存储在内存的特殊区域帧缓冲区 frame buffer,后期被转存到告诉视频内存 VRAM Video Randeom Access Memory 中。
    此时可以通过编程来做图形显示,同样会构建库,例如常用的绘制直线、曲线、图形、文字的函数。
# 画一个矩形
FUNCTION drawRectangle(x,y,width,height,color)
    FOR i=x TO x+width
        FOR j=y TO y+height
            frameBuffer[i][j] = color
        NEXT
    NEXT
RETURN
drawRectangle(54,4,4,8,0)  # 画一个黑色的矩形