1.1 计算机图形的简单历史回顾
早期:开关和灯
1.1.1 进入电子时代
激光打印机
彩色喷墨打印机
阴极射线管CRT–>字符–>出现用于绘制直线和曲线的算法–>计算机图形成为科学
2D图形–>实时计算机图形–>实时计算机图形(电子设备、数值读出器、交互性游戏、视觉模拟程序)
1.1.2 走向3D
三维(3D):宽度、高度、深度
2D+透视=3D
表面着色,物体大小–透视缩短
1.2 3D图形技术和术语
1.2.1 变换(Transformation)和投影(Projection)
将数学和图形数据转换成3D空间的操作叫渲染(Rendering)
变换(Transformation)
顶点(Vertices,单数Vertex)
变换矩阵(Transformation Matrix)
投影举证(Projection Matrix)
顶点通过变幻矩阵扭转;投影将3D坐标转换为二维屏幕坐标
1.2.2 光栅化(Rasterization)
实际绘制或填充每个定点之间的像素形成线段就叫做光栅化(Rasterization)
隐藏表面消除(Hidden Surface Removal)
线段绘图、线框渲染(Wireframe Rendering),一般用实心三角形,纯色填充
1.2.3 着色(Shading)
着色器(Shader)
1.2.4 纹理贴图(Texture Mapping)
纹理是贴到三角形或多边形的图片
1.2.5 混合(Blending)
混合时,我们能将不同的颜色混在一起
1.2.6 将点连接起来
1.3 3D图形的常见用途
1.3.1 实时3D
1.3.2 非实时3D
1.3.3 着色器
可编程着色器(Programmable Shading)
GPU图形处理单元
1.4 3D编程的基本原则
1.4.1 并非工具包
我们不能告诉它“在什么地方绘制什么”
1.4.2 坐标系统
在指定一个物体的位置和大小之前,需要一个参考帧对它进行测量和定位
在OpenGL中创建一个用于绘图的窗口时,必须指定希望使用的坐标系统和坐标与屏幕像素的映射关系
2D笛卡尔坐标(二维绘图)
在任何坐标系统中,两条线如果以直角相交,那么他们就定义了一个平面
坐标裁剪
指定裁剪区域:在二维空间中,裁剪区域就是窗口内部最小和最大的x和y值
指定原点位置
原点在左上角时,y值始终为正,且从上到下递增,有利于绘制文本,不利于绘制图形
视口(ViewPort):把绘图坐标映射到窗口坐标
裁剪区域的宽度和高度很少正好和窗口的宽度和高度(以像素为单位)相匹配,
如窗口大小为300×200,裁剪区域为x轴0到150,y轴0到100,那么坐标系统一个增量对应窗口系统两个增量。
顶点 空间中的一个位置
图元(Primitives):图元组成物体,是一维或二维的实体或表面
顶点(Vertex):图元的每个角称为顶点,是2D、3D空间的一个坐标
3D笛卡尔坐标
1.4.3 投影:从3D到2D(三角法和简单的矩阵操纵)
投影(Projection):用于创建几何图形的3D坐标将投影到一个2D表面
视景体(Viewing Volume)
正投影(或平行投影,Orthographic Projection)
使用这种投影,需要制定一个正方形或长方形的视景体
透视投影(Perspective Projection)
在这种投影中,远处的物体比近处的物体更小一些
平截头体(Frustum)
1.5 总结
需要一个物体的两幅图像才能感知真正的三维空间,可以通过透视、隐藏直线消除、颜色、着色等创建深度幻觉