stage3d编程-基础0(向量)

  从今天开始写我对于stage3d编程的一些基础知识。尽量保证更新,不太监。之所以想到写这个,是因为在半年前,本人刚开始学习3d的时候,苦于无详细的资料,无方向,走了很多弯路,现在分享出来,同时也是对关于stage3d编程的总结,因记性差, 所以觉得写下来,以后可以翻翻。

  如果是正在学习stage3d的童鞋,可能买了Adobe-Flash-11-Stage3D-Molehill-Game-Programming-Beginners-Guide这本书,当初我也是跟着这本书来学习的,但是里面其实有很多地方并没有讲明白,所以我准备从最基础的开始写。这些基础是3d的基石,只有懂了这些,在开发的时候才会得心应手。

向量   

  定义:向量是一种同时具有大小和方向的物理量。常见得向量有:速率,位移等。如果从几何角度描述向量的特征,那么就是一个有向线段来表示向量,其中长度表示向量的大小,箭头表示向量的方向。http://zh.wikipedia.org/wiki/%E7%9F%A2%E9%87%8F  。移步到此看平面向量http://baike.baidu.com/view/1431240.htm。

        

注意,向量所描绘的位置并不重要,根据向量的定义,改变向量的位置,并不会改变向量的大小和方向。因此当且仅当两个向量具有相同的方向和长度时,才会认为两个向量相等。这就使得,两个相同的向量,如果他们位置不同,那么就可以通过平移的方式来使得它们重合。

  1.1 向量和坐标系

    在数学几何中,向量可以通过以上方式来描述,但是在计算机中,我们只能通过数字的方式来描述。我们在空间中引入3d坐标系。计算机中2d坐标系是以屏幕左上角为原点。向右为x轴,向下为y轴。3d坐标系的原点则是以屏幕中心为原点,3d坐标系只比2d坐标多了一个z轴。因3d里面有各种各样的坐标系,例如有yup,y up顾名思义就是y轴朝上,还有z up,z up就是z轴朝上。所以在本文里面使用y up左手坐标系->y轴朝上,x轴朝右,z轴朝内,坐标原心是屏幕中心。关于右手坐标系和左手坐标系:

  

 

假如我们将3d向量的起始点A(例如上图为2D向量)移动到坐标原点。那么点A的坐标就是(0, 0, 0),点b的坐标就是(x, y, z),向量AB就可以表示为(x - 0, y - 0, z - 0)->(x, y, z)。因此就可以通过三个数字来表示一个向量。在stage3d中,可以通过一个vector3d来表示一个向量。但是一个3d坐标点,同样也可以通过vector3d来表示。

  1.2 向量的运算

    向量可以做加法,标量乘法,减法运算。

    加法:设向量u = (ux, uy, uz) ,向量 v = (vx, vy, vz),则 u + v = (ux + vx, uy + vy, uz + vz)

    标量乘法:设向量u = (ux, uy, uz),标量k,则ku = (kux, kuy, kuz)
    减法:减法同加法运算规则一样,减法其实可以通过加法和标量乘法推导出,例如u向量加上-1乘以v向量。
  1.3 向量的长度和单位
    在几何中,向量的大小就等于有向线段的长度。用双垂涎来表示向量的大小。例如||u||表示u的大小。在计算机中,我们如何计算这个长度呢? 其实可以通过毕达哥拉斯定理就可以算出3d向量的大小了(参考勾股定理,只不过这里是3d空间而已)。因为在之前就说了,向量的位置不会影响向量,将向量起始点移到坐标原点,那么||u|| = math.sqrt(x^2, y^2, z^2)。
    向量规范化:在stage3d里面vector3d提供了一个api,normalize()它就是用来对向量进行规范化。何为规范化?规范化其实就是让向量的长度为1。那么u向量规范化之后->(x/||u||, y / ||u||, z / ||u||)。

  1.4 向量点积
    点积是向量乘法的一种形式,它的计算结果是一个标量值。定义如下:设向量u = (ux, uy, uz) ,向量 v = (vx, vy, vz)。则u ・ v = ux*vx + uy*vy + uz * vz。
通过余弦定理可以推导出 u・v = ||u||||v||cos∂。其中∂表示uv之间的夹角(将uv向量平移到uv向量的起点重合)。那么我们就可以通过这个标量值来判断这两个向量的关系。如果结果等于0,那么这两个向量互相垂直,如果结果大于0,则两个向量之间的夹角小于90度,如果结果小于0,则两个向量之间的夹角大于90度。这个以后会用于关于光照的计算。
  1.5 向量叉积
    在stage3d中,vector3d提供了一个crossproduct的api用来计算叉积。叉积是向量乘法的第二种形式,它与点积不同,点积的结果是一个标量;叉积的结果是另一个向量。并且叉积只能用于3d向量。叉积的定义为:设向量u = (ux, uy, uz) ,向量 v = (vx, vy, vz)。则w = u x v = (uy * vz - uz * vy, uz * vx - ux * vz, ux * vy - uy * vx)。该w向量同时垂直于u和v向量。这个以后会用于求方向等的计算。
  1.6 点
    在stage3d中,点也是通过vector3d表示,点是会受到平移等影响。因为在stage3d中,向量和点都是使用vector3d表示,所以需要稍加区分。
    
 
第一次写,可能有些凌乱。下一章写矩阵。

 

posted on 2013-09-08 21:36  boblchen  阅读(648)  评论(0)    收藏  举报