XNA开发思考之3D开发中的小常识
PS:个人学习总结,转载请著明出处
在XNA的3D开发中,时常要涉及到坐标系统和摄象机的一些参数。同时还有矩阵的变化来在3维世界里的移动。
在二维世界里的坐标系统里,使用x,y坐标来表示一个点在坐标系统中的位置。电脑屏幕就是一个2维坐标系统。而在三维坐标系统中,引入了z坐标来表示物体距离的远近。下面将介绍2种三维坐标系统:左手坐标系和右手坐标系。
在左手坐标系统中,使用左手来确定三维坐标系统。如图所示,左手四指弯曲,拇指四指垂直,那么四指弯曲的方向就是x坐标轴(正方向)绕向y坐标轴(正方向);拇指所指的方向是z坐标轴的正方向。而使用右手确定的坐标系也如此:四指弯曲的方向就是x坐标轴(正方向)绕向y坐标轴(正方向)的方向;拇指所指的方向是z坐标轴的正方向。从以上两个图可以看出,两种坐标系不同的地方就是z坐标轴的方向。左手坐标系中z轴离我们而去,右手坐标系迎我们而来。
使用左手坐标系,可以保证永远使用正的z值来表示距离,在远也没有关系。这也是符合日常习惯的。然而在XNA开发中的3D坐标系,实际上应该是上图的右图,
左手坐标系的z轴正向与你眼睛看显示器方向相同,右手则相反. 举个例子,假如你的眼睛和显示器连成一条线,在左手坐标系里,显示器端是z,眼睛端是-z;在右手坐标系里,显示器是-z,眼睛是正z.
在三维坐标中观察世界时,需要确定以下几个问题:
1.在哪个位置观察:需要使用坐标来表示这个观察点的准确位置,这个坐标是在计算机的世界坐标系中的值。
2.向哪个方向观察.
3.对于观察者来说,代表上方的方向。如同我们头的上部是相对于我们的上方,当我们头向下看世界时,就会看到倒立的世界。在计算机三维世界中也是同样的道理,我们得指定我们的上方是哪个方向,才能看到正确的三维世界。
当上面几个问题确定以后,实际上就可以建立一个以观察者为圆心的三维坐标系,就把它称作观察坐标系吧。把原来世界坐标系中的所有物体的坐标转换为观察坐标系中的坐标以后,就可以知道每一个三维物体相对于我们的位置了。
下面在来介绍下三维透视转换
在显示器屏幕上显示的都是平面图形,不管他们是否具有三维的效果。计算机的三维世界最终需要显示在平面的屏幕上。在真实的世界中,我们可以看到空间中的任意景物,就是因为从景物发出或者反射的光线能够进入我们的眼睛,从而形成图象。在计算机的三维世界中,要看到景物,必须通过前面说过的摄象机。可以想象摄象机是我们观察计算机中三维世界的窗口,要想看到景物,景物发出或者反射的光线必须能够通过摄象机的镜头。三维透视就是如何把三维世界的景物进行透视转换,形成可以在电脑屏幕上显示的平面图形。