chapter2 图形系统 2.1基础理论

一,坐标系统

常见的有笛卡尔坐标系,世界坐标系,物体坐标系,眼坐标系,裁减坐标系,和窗口坐标系。

后五个坐标系全部基于笛卡尔坐标系建立,该笛卡尔坐标就好像是一个绝对坐标系,所有其他坐标系的基向量都通过这个坐标系来定位,而没有比它更大的坐标系。

  不同的引擎或图形API所采用的坐标系的坐标轴的朝向可能有所不同。有的坐标系X轴沿屏幕水平向右,Y轴向上,Z轴垂直指向屏幕内,有的则是前两者相同,而Z轴垂直指向屏幕外。

  因此,在刚接触一款新的引擎时,我们一定 要弄清它采用的是什么样的坐标系。

  在本书中,一律采用D,U,R代表坐标系的三个基,分别代表direction,up和right方向,E代表坐标系原点。三个基向量均为单位向量

一个坐标系统可表示为:

                               {E;D,U,R}

点X可表示为:

                               X=E+dD+uU+rR

X的坐标可表示为(d,u,r)

其中,d=D·(X-E),  u=U·(X-E),   r=R·(X-E)

     D·D=U·U=R·R=1,    D·U=D·R=U·R=0

       D×U=R,遵循右手定则,在某些情况下,叉乘会遵循左手定则,下文会详细讨论

二,坐标系统的手征性与叉乘规则

 1. 怎样区分左手坐标系和右手坐标系?

  下面以右手笛卡尔坐标系为例进行说明。

 手征性的数学定义 : 已知基于右手笛卡尔坐标系的一个坐标系统{P;U0 ,U1 ,U2 },如果U0 ×U1= U2 ,则该坐标系为右手坐标系,如果U0 ×U1 =-U2 ,则该坐标系为左手坐标系。

  显然{E;D,U,R}是一个右手坐标系,而{E;R,U,D}则是一个左手坐标系,因为R×U=-D.

  由此可知,坐标系统的手征性取决于我们书写基向量的顺序或者说是书写点坐标的顺序。因此,同样的三个坐标基,当我们一某种顺序书写时,假设是右手系,当我们以相反的顺序书写时,它便成了左手系。

  注意:左手系和右手系的区别仅仅是坐标书写顺序的不同以及叉乘遵循的定则可能 (!)不同,在其他方面都是相同的。

  2.正如上文所述,叉乘有时遵循左手定则,有时却遵循右手定则,那么该如何进行区分呢?

  仍以右手笛卡尔坐标系进行说明。

  ⑴设坐标系统{E;D,U,R},即右手坐标系。

  A=aD+bU+cR,      B=dD+eU+fR(不妨设a=1,b=c=0,e=1,d=f=0)

   其中D=(0,0,-1),  U=(0,1,0),   R=(1,0,0)

  A的笛卡尔坐标为(c,b,-a), 

  B的笛卡尔坐标为(f,e,-d)

  A的基座标为(a,b,c),      

  B的基座标为(d,e,f)

  ①对笛卡尔坐标进行运算,有:

   A×B=(ae-bd,cd-af,ce-bf)=(1,0,0)=R

  ②对基座标进行运算,有:

   A×B=(bf-ce,cd-af,ae-bd)=(0,0,1)=0·D+0·U+1·R  =R

   显然,无论是对笛卡尔坐标还是对基座标进行运算,叉乘都遵循右手定则。

 ⑵设坐标系统为{E;R,U,D},即左手坐标系。

   A=aR+bU+cD,    B=dR+eU+fD(仍然设a=1,b=c=0,e=1,d=f=0)

   其中D=(0,0,-1),   U=(0,1,0),   R=(1,0,0)

   A的笛卡尔坐标为(a,b,-c)

   B的笛卡尔坐标为(d,e,-f)

   A的基座标为(a,b,c)

   B的基座标为(d,e,f)

   ①对笛卡尔坐标进行运算,有:

   A×B=(ce-bf,af-cd,ae-bd)=(0,0,1)=-D

   ②对基座标进行运算,有:

   A×B=(bf-ce,cd-af,ae-bd)=(0,0,1)=0·R+0·U+1·D=D

   可见,当对笛卡尔坐标进行运算时,叉乘遵循右手定则。而当对基座标进行运算时,叉乘却遵循左手定则。

结论:当我们做叉乘运算时,遵循那个定则要看提供给我们的坐标是笛卡尔坐标还是基座标

三,点与向量的区别。

为了区别点与向量,我们引入齐次坐标,(x.y,z,w)

如果w=0,这个坐标就是向量的坐标,如果w=1,这个坐标就是点的坐标。

然而,在许多情况下,这样的区分是没有意义的。

猜你喜欢

转载自blog.csdn.net/huazai434/article/details/5745180