发布时间 : 2019-11-28
零基础了解3D游戏开发,是一件不容易的事。我们将分几部分为大家细化3D游戏开发的每个环节,希望对你了解3D游戏开发有些许帮助。
坐标系与坐标
坐标是3D空间世界的基础之一,干啥都离不开坐标,移动摄像机,定位,绘制图形等等。
在学习LayaAir 3D时,我们需要了解两个坐标,一个是位置坐标,另一个是UV坐标。
而了解这两种坐标之前,我们先介绍一下空间笛卡尔直角坐标系。
空间笛卡尔直角坐标系是用经过相同原点的xyz三条互相垂直的坐标轴相交而构成。
坐标系的两个轴正方向一致的情况下,因第三轴正方向相反,所以将坐标系分为左手坐标系与右手坐标系。
这两种坐标系没有好或不好,都应用的都比较广泛,比如Unity等引擎采用的是左手坐标系,LayaAir等引擎采用的是右手坐标系。所以我们有必要理解什么是左手坐标系与右手坐标系,以及两者的区别。
两种3D坐标系之所以用左右手分别命名,是为了便于记忆,分别用左手和右手三根手指的朝向,来代表三个坐标轴的正方向,这三个手指分别是拇指、食指、中指。
无论是左手还是右手,我们要记住,大拇指朝向的方向是x轴正方向,食指的朝向是y轴的正方向,中指的朝向是z轴的正方向。
现在我们面向屏幕,准备好双手来摆造型。先将左右两个手的食指(y轴)指向天空方向(在房间的就指天花板),然后将中指(z轴)冲前(立正站立时眼睛平视的方向),此时两个手的中指应该都与食指保持90度垂直。然后,再伸出大拇指(x轴)与食指和中指都保持90度垂直。可以参照下图手势。
网络中有不同的左右手坐标系统的说法和介绍,如果图片和轴朝向与本篇介绍的不同,一般也都是摄像机角度的差异,不用管别的,学习LayaAir以本篇为准来理解记忆即可。
摆好后,我们会发现,在保持z轴和y轴正方向相同的情况下,x轴的正方向是相反的。这就是左手坐标系和右手坐标系的区别。LayaAir引擎unity导出插件就是以x轴取反来自动适配LayaAir引擎。所以,直接在unity里编辑导出,然后在LayaAir引擎中使用,是不需要手工对坐标进行转换的。如果开发者一定要在LayaAir引擎项目中手动来调坐标,那需要注意左手坐标系与右手坐标系在x轴正方向的差异。
了解完坐标系,我们了解一下顶点。顶点可以理解为3D空间中的任意一个带xyz坐标的位置点,但顶点不仅包含了坐标位置信息,还有UV、法线、颜色等信息。其它的先不讲,我们继续来了解UV。
UV其实也是坐标, 完整的说应该是UVW(由于xyz已经被顶点坐标轴占用,所以另选三个字母表示), 这三个轴U是屏幕水平方向,V是屏幕垂直方向,W的方向是垂直于显示器表面的,到目前为止,一般游戏开发是用不上的,所以我们通常就会简称为UV。
去掉了W,那UV坐标就是一个2D平面坐标,UV坐标可用于模型纹理贴图等(后面介绍纹理的时候还会提及)。
UV坐标的贴图纹理向右和向下分别是U与V的坐标正方向。取值范围是0-1,不管纹理图片的像素是多少,3D美术制作软件导出的模型顶点数据都会对应贴图纹理的UV坐标,以保障渲染时的采样正确。
相对于UV坐标最终会对应贴图纹理上的像素点,顶点坐标则没有恒定的计量单位,最小的单位是点,无论是现实世界还是3D世界,点都是一个基础的抽象概念,他代表着一个单独的个体,可以无限大,也可以无限小。所以,点可以是1个像素,也可以是1毫米、1纳米、1千米等任意单位的基础单元。最终顶点之间用什么计量单位,通常由3D美术结合游戏设计而设定,3D游戏美术用的比较多的单位是米。所以程序的设定要与美术设定的单位保持统一,否则就会造成视觉效果上的过大或过小,出现与设计不符的效果。
下一部分,上海博思游戏学校将为你介绍3D游戏开发中的三角面、网络、模型,敬请期待。