3D概述:
3D或者三维,指三个维度:宽度,高度,深度。一个平面图形只有两种维度,宽度和高度,这就是2D,也就是二维。例如一张纸上画了一些图形,或者字是二维的,看起来没有立体感,而桌子上的水杯就不一样,是一个三维物体。区别在于你能感知到水杯的深度。
本质上计算机3D图形也是平面的,计算机的屏幕上所显示的是二维的图像,但是可以提供深度(第三维)的幻觉。如何让二维的图像能够感知到深度的幻觉?透视(perspective)可以让物体看起来能有三维的效果,也就是立体感。
2D+透视=3D
透视:就是线段之间的角度。将一本书放到桌子上,正对封面看的时候是不能感觉到书的厚度,但是侧着观察的时候,看到了更多的线条,以及线条之间的角度,从而能感知到三维效果。
计算机的屏幕是平面上显示的平面图像(2D),计算机3D图形实际是近似3D,比如一幅好的山水画,也能感觉到山水的真实和优美,活灵活现,不仅能感觉到山的高,水的长,还有谷的深。
真正的3D实际是每个眼睛对物体有一幅成像,两幅图像是不同的,因为两个眼睛和物体之间是有角度的。这两幅略微不同的图像在大脑中组合,大脑中便产生了一幅合成3D图像。
是不是单眼不能观察到3D世界呢?用手遮挡住一个眼睛,用一个眼睛观察时,也是能判断到物体的深度。这是因为物体之间相互参照,光线变化等效果综合作用让我们也可以感知到深度,感知到三维效果。这些效果或者说透视效果有下面几种。
1.透视缩短(foreshortening),看到的近处的物体比远处的大。
2.颜色的变化
3.纹理(texture)
4.光照(lighting)
5.着色
6.颜色的强度,是由光照引起的,没有光线是不可能看到物体的,光线的强弱和能观察的颜色种类也是有关系的,光线越暗,观察到的颜色越少,比如到了晚上,只能看到黑灰色。而在光照充足的地方,风景也是那么迷人都是有关系的。
这些效果足以触发大脑判断它的深度。这些效果帮助我们进行三维图像的感知。
计算机3D效果:
将三维的物体进行几何描述并且转换为屏幕上的一幅图像,这就是渲染(Render),渲染会使用如下的3D效果。
1.视角透视,一个三维的物体有很多的线索,将视角看不到的隐藏。隐藏表面消除(Hidden surface removal)。
2.颜色和着色,给物体的每个表面添加颜色属性。
3.光照和阴影,添加光照,添加影子。
4.纹理贴图(texture),表面贴一幅图像,称之为纹理,纹理的每个单独元素称为纹理单元(texel)。
5.雾,逐渐模糊远处的物体,添加层次感,远近感。
6.混合和透明(blending),颜色或者物体组合,可以用于多种目的。例如透明,反射等。
7.抗锯齿(antialiasing),对多边形边缘做平滑处理,看起来更真实。
经过上述3D效果处理后的图像看上去更加逼真,具有三维效果。
三维物体描述:
二维图形绘图时最常用的坐标是笛卡尔坐标系统,由x,y坐标构成。三维物体绘制在一个3D笛卡尔坐标,在笛卡尔坐标系统上添加了深度,来描述三维空间。
三维物体都是由多边形组成,最简单的多边形就是三角形,并且OpenGL硬件处理三角形也是非常快的。有些硬件也支持其他形状,四边形,或者五边形,或者其他的通用图形。其实所有的多边形都可以拆分成三角形,用三角形来描述。
多边形由顶点构成,在三维空间中将一个三维物体的顶点连线,就可以看到三维物体的表面。
计算机的屏幕是平面的,那意味着我们要看到我们绘制的三维物体要显示在计算机的屏幕上,需要将3D转换成2D。将一个3D坐标投影到一个2D表面,称之为投影。
在OpenGL中,主要有两种类型的投影。第一种为正投影(平行投影),首先指定一个正方形或者长方形的可视区域,可以区域之外的物体不会绘制,并且实际相同大小的物体,在屏幕上具有相同的大小。不论物体与屏幕的距离。
第二种投影为透视投影,这种投影的可视区域为一个斗型,或者说一个顶部削平的金字塔,(平截头体),距离屏幕较远的物体在屏幕上显的较大,类似与手影游戏,与光源近的影子更大。
阅读(1670) | 评论(0) | 转发(1) |