目录
三个要解决的问题
建模(modeling):如何表示事物
呈现(rendering):如何模拟图像的形成过程
行为(behavior):如何控制事物
光栅图形显示技术
- 光栅显示器上的图像是由光栅(raster)形成的。
- 光栅是一组互相平行的水平扫描线,每行扫描线是由大小一致的显示单元组成的显示序列,每一显示单元称为一个像素,可显示给定的颜色和灰度。
- 光栅显示器将显示图元(primitive)如线、文字、填充颜色或图案区域等,以像素的形式存储到一个刷新缓冲器中。
- 光栅图形具有对显示区域填充颜色或图案的能力,存储的图像更加易于操作。
- 对于光栅系统来说,只能用光栅网格上的像素近似地描绘平滑的直线、多边形和如圆、椭圆等曲线图元的边界。
- 这引起了图中看到的锯齿状与阶梯状的问题,在图形学中称为“走样”。
- 用于减少或消除这种现象的技术称为“反走样”。
- 如何使光栅图形最完美地逼近实际图形,是光栅图形学要研究的内容。
- 确定最佳逼近图形的像素集合,并用指定的颜色和灰度设置像素的过程叫做图形的扫描转换,或者称作“光栅化”。
图形与图像
- 要生成真实感图形,首先必须建立画面场景的几何表示,再用某种光照模型,计算场景在假想的光源、纹理、材质属性下的光照明效果。结果是以数字图象的方式提供的,因此计算机图形学与图象处理也有着密切的关系。
- 图形与图象是密切相关但又不同的两个概念。图象纯指计算机内以位图形式存在的亮度和颜色信息,而图形则由场景的几何模型和物理属性共同描述。
因此建模就是找到事物的几何模型物理属性的图形表示方法,呈现就是将图形变成图像的过程
以下是计算机呈现二维图的简单步骤:
- 定义几何要素,构建物体在计算机内的表示。确定各物体在三维空间中的方位,选取场景观察点。
- 计算物体表面需要显示的颜色,这些颜色可以直接赋值,或根据光照条件及表面纹理计算得到。
- 光栅化,把物体的几何描述和颜色信息转换为屏幕的像素。
直线生成算法
在网格上生成直线最常用的算法为Bresenham算法:
#include "device.h"
void lineBres (int xa, int ya, int xb, int yb)
{
int dx = abs (xa - xb), dy = abs (ya - yb);
int p = 2 * dy - dx;
int twoDy = 2 * dy, twoDyDx = 2 * (dy - dx);
int x, y, xEnd;
/* Determine which point to use as start, which as end */
if (xa > xb)
{ x = xb;
y = yb;
xEnd = xa;
}
else { x = xa; y = ya;
xEnd = xb;
}
setPixel (x, y);
while (x < xEnd) {
x++;
if (p < 0)
p += twoDy;
else {
y++;
p += twoDyDx;
}
setPixel (x, y);
}
}
字符生成
对于给定某种字体的每一个字符,生成一个小型的矩形位图。位图中该位为1表示字符的笔画经过此位,该位为0表示字符的笔画不经过此位。
RGB
研究发现,一种锥体细胞专门感受红光,另二种锥体细胞则分别感受绿光和蓝光。三者共同作用,使人们产生了不同的颜色感觉。
大多数彩色图形显示设备特别是CRT等光栅显示器均采用红、绿、蓝三原色,即使用RGB颜色模型。