初识3D
三维描述一个图形有三个维度:
- 宽度
- 高度
- 深度
实际上3D图形在计算机屏幕上所显示的也是二维的:
3D = 2D + 透视
3D图像眼睛显示原理:
光差一个图形每只眼睛提供一副独立的图像,随着物体逐渐变远,图像直接的角度也变小,3D效果减弱。
单凭透视本身就可以创建三维的外观:
- 一个线索是由光线照射产生的表面着色
- 另一个线索是进处的物体比远处的大
这种透视效果称为透视缩短。
3D图形技术和术语
- 渲染:将数学和图形数据转换成3D图形空间的操作。
- 变换:
- 投影:
- 光栅化:实际绘制或填充每个定点之间的像素形成的像素。
- 着色:沿着表面(通过顶点之间)改变颜色值。
- 纹理贴图:纹理是将图片贴在多边形上的图片。
混合:使用混合来创建反射效果
首先,上下颠倒的绘制这个立方体
然后,再在它上面绘制地板并与它进行混合
最后,绘制正常方向的立方体。实心几何体:是将顶点间的点连接起来,然后对三角形进行光栅化而使对象变得有实体。
- 实时3D:指活动并与用户进行交互的图形。
3D编程的基本原则
- OpenGL是一种底层渲染的API,可以创造自己的算法。
- 在 OPenGL或几乎所有3DAPI中创建一个用于绘制的窗口时,必须指定希望使用的坐标系统以及指定的坐标如何映射到实际的屏幕像素。
坐标系统
2D笛卡尔坐标:
是二维绘图中最常用的坐标系统,表示方法(0,0)。
注意:如果一个系统只有两个轴,那么久只有一个平面可以用来绘图。坐标裁剪:
窗口是以像素为单位进行度量的。开始在窗口中绘制点、线、形状之前,必须告诉OpenGL如何把指定坐标翻译成屏幕坐标?可以通过占据窗口的笛卡尔空间完成这个任务———这个区域称为裁剪区域。
以下为两种裁剪方法:
第一种. 指定窗口内部最小和最大的x、y值。
第二种. 指定原点的位置。
视口:把绘制坐标映射到窗口坐标
裁剪区域的一般不会正好与窗口的大小(像素为范围)匹配。所以坐标系统必须从逻辑笛卡尔坐标映射到物理屏幕坐标——-这个映射是通过视口的设置指定的。
视口:就是窗口内部用于绘制裁剪区域的客户区域,视口简单地把裁剪区域映射到窗口中的一个区域。
3D笛卡尔坐标
在二维中增加深度分量。
投影:从3D到2D:
将几何图形的3D坐标投影到一个2D表面(窗口背景)。
通过投影我们可以在窗口中显示视景体。并可指定它的变换。
- 正投影:
或称为平行投影,大小比例不变。 - 透视投影:
远处的物体看上去比近处的物体看上去小,在3D中可以获得逼着感。