CSDN博客

img caimouse
博客专家

相关概念

发表于2004/9/27 15:29:00  3701人阅读

分类: Direct3D

大家学习立体几何时,都要用到坐标系,才能把几何体定位和计算。在计算机里要显示3D的图像,就是显示几何体,就是把那些数字化的坐标转换成几何图像显示。因此坐标系必须要学习的,否则那一大堆坐标数据就没有办法显示,或者显示出来是乱七八糟的。
在Direct3D里也要用到坐标系,它的坐标系是左手坐标系。目前常见的有两种坐标系,如下图所示:

  图1.1:左手坐标系,右手坐标系

  左手坐标系就是x轴的正方向指向右,y轴正方向批向上,z轴的正方向指向里面。当伸出左手,让四个手指指着x轴的正方向,大母指指向z轴的正方向,牚心指向y轴的正方向。符合这样规则的坐标系,就叫做左手坐标系。
右手坐标系就是x轴的正方向指向右,y轴正方向批向上,z轴的正方向指向外面。当伸出右手,让四个手指指着x轴的正方向,大母指指向z轴的正方向,牚心指向y轴的正方向。符合这样规则的坐标系,就叫做右手坐标系。
当然还有很多其它坐标系,就不一一介绍了。
  如果想从文件中读取不是左手坐标系的几何模型时,就要作相应的转换。比如从右手坐标系转换到左手坐标系,就是进行三角形顶点顺序改变和翻转。
  3D绘图就是在二维的计算机屏幕上创建三维幻觉。为了做到这一点,使用了数学变换进行建模和处理图像。为了熟悉3D算法和概念,作为使用Direct3D创建和处理3D世界和对象的准备。理解3D算法是怎么实现的将有助于你领悟使用Direct3D。
3D绘图比2D绘图要复杂的多,这是因为程序需要理解的三维图形在二维平面显示的原理,比显示在屏幕上的要多得多。创建三维图形通常使用商业三维建模软件,比如3DS,或3D MAX等等。
可以使用3D绘图算法实时处理各种类似这样的模型,使你的世界中的模型更具有真实感。这种具有真实感的模型由物体、摄像机和光源组成。
3D世界中包含的3D物体有各种属性,可以通过处理这些属性来改变物体。
  一个物体的形状由表面定义,而表面可以被定义成平面或二次曲面。如果已经看过一些轮廓模型,就会知道用于实体物体的基本表面。每个物体都有纹理,定义了表面的粗糙度和光滑度。每个对象都有漫反射和镜面反射,反射属性决定了射到物体上的光线反射的程度。漫反射代表对象明暗程度。一个新的干净的球要比又旧又脏求具有更高的漫反射。镜面反射代表了物体看起来的亮度,水晶瓶比木块有更高的镜面反射。物体的位置,在3D空间中由三个坐标轴定义:x,y,z坐标。物体方位性,即三维空间的某个方向。对方位进行转动处理的效果是物体旋转。
把小的、或最基本的物体组成大物体,这个处理被称为组合。组合简化了复杂的大物体的移动。比如说一个自行车,它由两个旋转的车轮。当车轮旋转的时候,整个车向前移动。车轮旋转和移动的相对静态坐标系统。组合能使向前移动坐标系统,同时保持把车轮约束在上面;无需明确的向前移动车轮。组合对一些复杂的移动物体,比如说轿车、飞机、动物等等是非常有用的。
为了能看见物体,定义了摄像机代表用户对3D世界的关联。摄像机有一个位置和一个方向,它们定义了观察者在3D世界的什么地方看和看到的物体是什么样。在3D世界里移动摄像机和改变它的方向使看到物体不同部份。
虽然有了物体和摄像机,但是还是什么都看不见,除非把一些光线打到物体表面上。可以创建不同风格的光线,通过改变光线照亮的程度来改变物体在场景中的外观。不同光线类型和效果占用CPU和其它资源是不一样的。
环境光对场景中所有的物体都提供了固定不变的照明,所有其它的光线光的强度和方向上都是不同的。
  点光源是从一个点发出的光,反射的角度取决于光点和物体位置之间的角度。就会在物体表面出反射现象。
  平行光同点光源类似,但它是从一个平面发射出来的光,经过反射后入射角和反反射角是一样大小。这是的平行光计算量少的原因,但损失了一些真实感。
  聚光源正如它的的名字一样,随着接近物体,光线强度产生变化。
  方向光最经常用于模拟太阳光和其它无穷远的光源。这种光源被看作来自无穷远,一次它的强度不随着接近物体而变化。在唯一的方向上,亮度是固定的。
  可以确定亮度或强度,来影响物体被照亮的程度。聚光源和其它的光源有一个确定光线从哪里发出的方向。
  某些光源的强度受距离的影响。但对环境光来说不是这样的,它没有位置,不是有方向的光远。通常与场景有无限远的距离。
  可以创建不同的有色光。这比白色光要复杂的多,因为它改变了所照到的每一个物体的颜色。
  3D绘图有两种重要的裁剪概念:视区(View Volumes)和可视表面(Visible Surface)。视区用于减少被渲染的对象的数量。越靠近摄像机,物体就越大,细节也越多。当远离摄像机的时候,物体就变小了,细节也少。当物体非常远的时候,它可以从视野中消失,而没有丢失可被察觉的真实感。实际上,物体总是在一个适当的距离上被不被察觉地模拟得更简单。
在摄像机后面的物体能够很好的被裁剪;在2D应用程序中,超过屏幕四个边的对象被裁剪。在裁剪中使用两种投影。一种是平行(正交)投影,另一种是透视投影。透视投影使用没影点。正如它的名字所示,距离观察者远的物体就变小了。
可视表面检测是通过避免计算渲染不可见物体而加速渲染算法的一种方法。它需要计算出哪一个对象的表面在视区中没有被裁剪以及哪些面远离摄像机。
  实时地渲染3D场景需要处理大量的计算,因此就要找到一些好的方法来减少计算量,优化程序性能,但随着技术的发展,越来越不那么重视优化,并且显示的场境非常的真实性。
随着对3D图形编程的概述,可以考虑使用Direct3D开始制作应用程序了。Direct3D使无须直接地写驱动程序,就能够访问许多显卡的3D硬件加速功能,让很多3D算法可以在显卡中直接运行,极大地加速3D程序性能。
阅读全文
0 0

相关文章推荐

img
取 消
img