1、坐标系与右手定则坐标系与右手定章(OpenInventor运用的坐标体系)坐标系与右手定章(OpenInventor运用的坐标体系)(转)在三维坐标系中,Z轴的正轴偏向是依据右手定章肯定的.右手定章也决议三维空间中任一坐标轴的正扭转偏向. 要标注X.Y和Z轴的正轴偏向,就将右手背对着屏幕放置,拇指即指向X轴的正偏向.伸出食指和中指,如右图所示,食指指向Y轴的正偏向,中指所指导的偏向等于Z轴的正偏向. 要肯定轴的正扭转偏向,如右图所示,用右手的大拇指指向轴的正偏向,曲折手指.那么手指所指导的偏向等于轴的正扭转偏向.Open Inventor 对 3D 数据运用的是右手坐标系,从屏幕内指向外,暗示
2、 z 轴的正偏向.所有的角度单位都是弧度.对象都是在本身的局部坐标系空间下进行描写的,既众所周知的对象坐标系空间(object coordinate space).当场景中的所有物体都已经进行完坐标变换后,那么它们就都在世界坐标系空间下描写了(world coordinate space).拍照机和灯光节点处于世界坐标系空间下.三维坐标系三维坐标系三维笛卡儿坐标系是在二维笛卡儿坐标系的基本上依据右手定章增长第三维坐标(即Z轴)而形成的.同二维坐标系一样,AutoCAD中的三维坐标系有世界坐标系WCS(World Coordinate System)和用户坐标系UCS(User Coordina
3、te System)两种情势.目次1.2.3.睁开1.右手定章 在三维坐标系中,Z轴的正轴偏向是依据右手定章肯定的.右手定章也决议三维空间中任一坐标轴的正扭转偏向. 要标注X.Y和Z轴的正轴偏向,就将右手背对着屏幕放置,拇指即指向X轴的正偏向.伸出食指和中指,如右图所示,食指指向Y轴的正偏向,中指所指导的偏向等于Z轴的正偏向. 要肯定轴的正扭转偏向,如右图所示,用右手的大拇指指向轴的正偏向,曲折手指.那么手指所指导的偏向等于轴的正扭转偏向. 2.世界坐标系(WCS) 在AutoCAD中,三维世界坐标系是在二维世界坐标系的基本上依据右手定章增长Z轴而形成的.同二维世界坐标系一样,三维世界坐标系是
4、其他三维坐标系的基本,不克不及对其从新界说. 3.用户坐标系(UCS) 用户坐标系为坐标输入.操纵平面和不雅察供给一种可变动的坐标系.界说一个用户坐标系即转变原点(0,0,0)的地位以及XY平面和Z轴的偏向.可在AutoCAD的三维空间中任何地位定位和定向UCS,也可随时界说.保管和复用多个用户坐标系.详见本章第3节. 三维坐标情势在AutoCAD中供给了下列三种三维坐标情势: 1.三维笛卡尔坐标 三维笛卡尔坐标(X,Y,Z)与二维笛卡尔坐标(X,Y)类似,即在X和Y值基本上增长Z值.同样还可以运用基于当前坐标系原点的绝对坐标值或基于上个输入点的相对坐标值. 2.圆柱坐标 圆柱坐标与二维极坐标
5、类似,但增长了从所要肯定的点到XY平面的距离值.即三维点的圆柱坐标可经由过程该点与UCS原点连线在XY平面上的投影长度,该投影与X轴夹角.以及该点垂直于XY平面的Z值来肯定.例如,坐标“1060,20”暗示某点与原点的连线在XY平面上的投影长度为10个单位,其投影与X轴的夹角为60度,在Z轴上的投影点的Z值为20. 圆柱坐标也有相对的坐标情势,如相对圆柱坐标“ 1045 ,30”暗示某点与上个输入点连线在XY平面上的投影长为10个单位,该投影与X轴正偏向的夹角为45度且Z轴的距离为30个单位. 3.球面坐标 球面坐标也类似与二维极坐标.在肯定某点时,应分离指定该点与当前坐标系原点的距离,二者连
6、线在XY平面上的投影与X轴的角度,以及二者连线与XY平面的角度.例如,坐标“104560”暗示一个点,它与当前UCS原点的距离为10个单位,在XY平面的投影与X轴的夹角为45度,该点与XY平面的夹角为60度. 同样,圆柱坐标的相对情势标清楚明了某点与上个输入点的距离,二者连线在XY平面上的投影与X轴的角度,以及二者连线与XY平面的角度. 数学中经常运用的三种三维坐标系三维笛卡尔坐标(X,Y,Z)是在三维笛卡尔坐标系下的点的表达式,个中,y,z分离是失去配合的零点且彼此互相正交的x轴,y轴,z轴的坐标值. 圆柱坐标(,z)是圆柱坐标系上的点的表达式.设P(x,y,z)为空间内一点,则点P也可用如
7、许三个有次序的数,z来肯定,个中为点P在xoy平面的投影M与原点的距离,为有向线段PO在xoy平面的投影MO与x轴正向所夹的角.圆柱坐标系和三维笛卡尔坐标系的点的坐标的对应关系是,x=cos,y=sin,z=z. 球面坐标系由到原点的距离.方位角.仰角三个维度构成. 球面坐标(,)是球面坐标系上的点的表达式.设P(x,y,z)为空间内一点,则点P也可用如许三个有次序的数r,来肯定,个中r为原点O与点P间的距离,为有向线段与z轴正向所夹的角,为从正z轴来看自x轴按逆时针偏向转到有向线段的角,这里M为点P在xOy面上的投影.如许的三个数r,叫做点P的球面坐标,这里r,的变更规模为 r0,+), 0
8、, 2, 0, . r = 常数,即以原点为心的球面; = 常数,即以原点为极点.z轴为轴的圆锥面; = 常数,即过z轴的半平面. 个中 x=rsincos y=rsinsin z=rcos笛卡尔坐标系是直角坐标系和斜角坐标系的统称. 订交于原点的两条数轴,构成了平面仿射坐标系.如两条数轴上的器量单位相等,则称此仿射坐标系为笛卡尔坐标系.两条数轴互相垂直的笛卡尔坐标系,称为笛卡尔直角坐标系,不然称为笛卡尔斜角坐标系. 仿射坐标系和笛卡尔坐标系平面向空间的推广 订交于原点的三条不共面的数轴构成空间的仿射坐标系.三条数轴上器量单位相等的仿射坐标系被称为空间笛卡尔坐标系.三条数轴互相垂直的笛卡尔坐标
9、系被称为空间笛卡尔直角坐标系,不然被称为空间笛卡尔斜角坐标系. 笛卡尔坐标,它暗示了点在空间中的地位,和直角坐标有差别,两种坐标可以互相转换.举个例子:某个点的笛卡尔坐标是493 ,454, 967,那它的X轴坐标就是4+9+3=16,Y轴坐标是4+5+4=13,Z轴坐标是9+6+7=22,是以这个点的直角坐标是(16, 13, 22),坐标值不成能为负数(因为三个天然数相加无法成为负数). 这个应当是了 右手定章 在三维坐标系中,Z轴的正轴偏向是依据右手定章肯定的.右手定章也决议三维空间中任一坐标轴的正扭转偏向. 要标注X.Y和Z轴的正轴偏向,就将右手背对着屏幕放置,拇指即指向X轴的正偏向.
10、伸出食指和中指,食指指向Y轴的正偏向,中指所指导的偏向等于Z轴的正偏向三维坐标系与几何学Microsoft Direct3D运用程序须要熟习三维几何学道理.本节介绍创建三维场景所需的最主要的几何概念.本节涉及到以下主题.这些主题给读者供给了一个对Direct3D运用程序所涉及到的根本概念的高层描写.更多有关这些主题的信息,请参阅更多的信息.三维坐标系平日三维图形运用程序运用两种笛卡尔坐标系:左手系和右手系.在这两种坐标系中,正x轴指向右面,正y轴指向上面.经由过程沿正x轴偏向到正y轴偏向握拳,大姆指的指向就是响应坐标体系的正z轴的指向.下图显示了这两种坐标体系.Microsoft Direct
11、3D运用左手坐标系.假如正在移植基于右手坐标系的运用程序,必须将传给Direct3D的数据做两点转变.颠倒三角形极点的次序,如许体系会从正面以顺时针的偏向遍历它们.换句话说,假如极点是v0,v1,v2,那么以v0,v2,v1的次序传给Direct3D.用不雅察矩阵对世界空间中的z值取反.要做到这一点,将暗示不雅察矩阵的D3DMATRIX构造的_31._32._33和_34成员的符号取反.要得到等同于右手系的后果,可以运用D3DXMatrixPerspectiveRH和D3DXMatrixOrthoRH函数界说投影矩阵.但是,要当心运用D3DXMatrixLookAtRH函数,并响应地颠倒不和剔
12、除的次序及放置立方体谅图.固然左手坐标系和右手坐标系是最为经常运用的体系,但在三维软件中还运用很多其它坐标系.例如,对三维建模运用程序而言,运用y轴指向或背向不雅察者的坐标体系并不是罕有.在这种情形下,随意率性轴(x,y或z)的正半轴指向不雅察者的被界说为右手系.随意率性轴(x,y或z)的正半轴背向不雅察者的被界说为左手系.假如正在移植一个基于左手系进行建模的运用程序,z轴向上,那么除了前面的步调外,还必须扭转所有的极点数据(译注:假如本来的坐标系为正x轴向里,正y轴向左,正z轴向上,那么传给Direct3D的极点的x值对应本来的y值,y值对应本来的z值,z值对应本来的x值,亦即扭转极点数据)
13、.对三维坐标体系中界说的三维物体履行的最根本操纵是变换.扭转和缩放.可以归并这些根本变换以创建一个新的变换矩阵.细节请参阅三维变换.即使归并雷同的变换操纵,不合的归并次序得到的成果是不成交流的矩阵相乘的次序很主要.三维图元三维图元是构成单个三维实体的极点聚集.三维坐标体系中最简略的图元是点的聚集,称为点表.平日三维图元是多边形.一个多边形是由至少三个极点描写的三维形体.最简略的多边形是三角形.Microsoft Direct3D运用三角形构成大多半多边形,因为三角形的三个极点必定是共面的.运用程序可以用三角形组合成大而庞杂的多边形及网格(mesh).下图显示了一个立方体.立方体的每个面由两个三
14、角形构成.全部三角形的聚集构成了一个立方体图元.可以将纹理和材质运用于图元的概况使它们看起来像是实心的.可以运用三角形创建具有滑腻曲面的图元.下图显示了若何用三角形模仿一个球体.运用了材质后,衬着得到的球体看起来是曲折的.假如运用高洛德着色,成果更是如斯.更多信息请参阅高洛德着色.概况和极点法向量网格中的每个面有一个垂直的法向量.该向量的偏向由界说极点的次序及坐标体系是左手系照样右手系决议.概况法向量从概况上指向正向面那一侧,假如把概况程度放置,正向面朝上,背向面朝下,那么概况法向量为垂直于概况从下方指向上方.在Microsoft Direct3D中,只有面的正向是可视的.一个正向面是极点按照
15、顺时针次序界说的面.任何不是正向面的面都是背向面.因为Direct3D不老是衬着背向面,是以背向面要被剔除.假如想要衬着背向面的话,可以转变剔除模式.更多信息请参阅剔除状况.Direct3D在盘算高洛德着色.光照和纹理后果时运用极点法向.Direct3D运用极点法向盘算光源和概况间的夹角,对多边形进行高洛德着色.Direct3D盘算每个极点的色彩和亮度值,并对图元概况所笼罩的所有像素点进行插值.Direct3D运用夹角盘算光强度,夹角越大,概况得到的光照就越少.假如正在创建的物体是平直的,可将极点法向设为与概况垂直,如下图所示.该图界说了一个由两个三角形构成的平直概况.但是,更可能的情形是物体
16、由三角形带(triangle strips)构成且三角形不共面.要对全部三角形带的三角形腻滑着色的一个简略办法是起首盘算与极点相联系关系的每个多边形概况的概况法向量.可以如许盘算极点法向,使极点法向与极点所属的每个概况的法向的夹角相等.但是,对庞杂图元来说这种办法可能不敷有用.这种办法如下图所示.图中有两个概况,S1与S2,它们的邻边在上方.S1与S2的法向量用蓝色显示.极点的法向量用红色显示.极点法向量与S1概况法向的夹角和极点法向量与S2概况法向的夹角雷同.当对这两个概况进行光照盘算和高洛德着色时,得到成果是中央的边被腻滑着色,看起来像是弧形的(而不是有棱角的).假如极点法向偏向与它相联系
17、关系的某个面,那么会导致谁人面上的点光强度的增长或削减.下图显示了一个例子.这些面的邻边依旧朝上.极点法向偏向S1,与极点法向与概况法向有雷同的夹角比拟,这使极点法向与光源间的夹角变小.可以用高洛德着色在三维场景中显示一些有清楚边沿的物体.要达到这个目标,只要在须要产生清楚边沿的概况交线处,把概况法向复制给交线处极点的法向,如下图所示.假如运用DrawPrimitive办法衬着场景,要将有锐利边沿的物体界说为三角形表,而非三角形带.当将物体界说为三角形带时,Direct3D会将它作为由多个三角形构成的单个多边形处理.高洛德着色被同时运用于多边形每个概况的内部和概况之间.成果产生概况之间腻滑着色
18、的物体.因为三角形表由一系列不相连的三角形面构成,所以Direct3D对多边形每个面的内部运用高洛德着色.但是,没有在概况之间运用高洛德着色.假如三角形表的两个或更多的三角形是相邻的,那么在它们之间看起来会有一条锐利边沿.另一种可选的办法是在衬着具有锐利边沿的物体时转变到平面着色模式.这在盘算上是最有用的办法,但它可能导致场景中的物体不如用高洛德着色衬着的物体真实.三角形光栅化轨则极点指定的点经常不克不及准确地对应到屏幕上的像素.此时,Microsoft Direct3D运用三角形光栅化轨则决议对于给定三角形运用哪个像素.三角形光栅化轨则Direct3D在填充几何图形时运用左上填充商定(top
19、-left filling convention).这与Microsoft Windows的图形装备接口(GUI)和OpenGL中的矩形运用的商定雷同.Direct3D中,像素的中间是决议点.假如中间在三角形内,那么该像素就是三角形的一部分.像素中间用整数坐标暗示.这里描写的Direct3D运用的三角形光栅化轨则不必定实用于所有可用的硬件.测试可以发明这些轨则的实现间的细微变更.下图显示了一个左上角为(0,0),右下角为(5,5)的矩形.正如大家想象的那样,此矩形填充25个像素.矩形的宽度由right减left界说.高度由bottom减top界说.在左上填充商定中,上暗示程度span在垂直偏向
20、上的地位,左暗示span中的像素在程度偏向上的地位.一条边除非是程度的,不然不成能是顶边一般来说,大多半三角形只有左边或右边.左上填充商定肯定当一个三角形穿过像素的中间时Direct3D采纳的动作.下图显示了两个三角形,一个在(0,0),(5,0)和(5,5),另一个在(0,5),(0,0)和(5,5).在这种情形下第一个三角形得到15个像素(显示为黑色),而第二个得到10个像素(显示为灰色),因为公用边是第一个三角形的左边.假如运用程序界说一个左上角为(0.5,0.5),右下角为(2.5,4.5)的矩形,那么这个矩形的中间在(1.5,2.5).当Direct3D光栅化器tessellate这
21、个矩形时,每个像素的中间都毫无异义地分离位于四个三角形中,此时就不须要左上填充商定.下图显示了这种情形.矩形内的像素依据在Direct3D中被哪个三角形包含做了响应的标注.假如将上例中的矩形移动,使之左上角为(1.0,1.0),右下角为(3.0,5.0),中间为(2.0,3.0),那么Direct3D运用左上角填充商定.这个矩形中大多半的像素跨越两个或更多的三角形的鸿沟,如下图所示.这两个矩形会影响到雷同的像素.点.线光栅化轨则点和点精灵一样,都被衬着为与屏幕边沿对齐的四边形,是以它们运用与多边形同样的衬着轨则.非抗锯齿线段的衬着轨则与GDI运用的轨则完整雷同.更多有关抗锯齿线段的衬着,请参阅
22、ID3DXLine.点精灵光栅化轨则对点精灵和patch图元的衬着,就似乎先把图元tessellate成三角形,然后将得到的三角形进行光栅化.更多信息,请参阅点精灵.矩形贯串Microsoft Direct3D和Microsoft Windows编程,都是用术语包抄矩形来评论辩论屏幕上的物体.因为包抄矩形的边老是与屏幕的边平行,是以矩形可以用两个点描写,左上角和右下角.当在屏幕长进行位块传输(Blit = Bit block transfer)或射中检测时,大多半运用程序运用RECT构造保管包抄矩形的信息.C+中,RECT构造有如下界说.typedef struct tagRECT LONG
23、left; / 这是左上角的x坐标. LONG top; / 这是左上角的y坐标. LONG right; / 这是右下角的x坐标. LONG bottom; / 这是右下角的y坐标. RECT, *PRECT, NEAR *NPRECT, FAR *LPRECT; 在上例中,left和top成员是包抄矩形左上角的x-和y-坐标.类似地,right和bottom成员构成右下角的坐标.下图直不雅地显示了这些值.为了效力.一致性及易用性, Direct3D所有的presentation函数都运用矩形.三角形插值对象(interpolants)在衬着时,流水线会贯串每个三角形的概况进行极点数据插值.
24、有五种可能的数据类型可以进行插值.极点数据可所以各类类型的数据,包含(但不限于):漫反射色.镜面反射色.漫反射阿尔法(三角形透明度).镜面反射阿尔法.雾因子(固定功效流水线从镜面反射的阿尔法分量中取得,可编程极点流水线则从雾存放器中取得).极点数据经由过程极点声明界说.对一些极点数据的插值取决于当前的着色模式,如下表所示.着色模式描写平面 在平面着色模式下只对雾因子进行插值.对所有其它的插值对象,全部面都运用三角形第一个极点的色彩.高洛德 在所有三个极点间进行线性插值.依据不合的色彩模子,对漫反射色和镜面反射色的处理是不合的.在RGB色彩模子中,体系在插值时运用红.绿和蓝色彩分量.色彩的阿尔法
25、成员作为单独的插值对象看待,因为装备驱动程序可以以两种不合的办法实现透明:运用纹理混杂或运用点画法(stippling).可以用D3DCAPS9构造的ShadeCaps成员肯定装备驱动程序支撑何种插值.向量.极点和四元数贯串Microsoft Direct3D,极点用于描写地位和偏向.图元中的每个极点由指定其地位的向量.色彩.纹理坐标和指定其偏向的法向量描写.四元数给三元素向量的 x, y, z值增长了第四个元素.用于三维扭转的办法,除了典范的矩阵以外,四元数是另一种选择.四元数暗示三维空间中的一根轴及环绕该轴的一个扭转.例如,一个四元数可能暗示轴(1,1,2)和1度的扭转.四元数包含了有价值
26、的信息,但它们真正的威力源自可对它们履行的两种操纵:合成和插值.对四元数进行插值与合成它们类似.两个四元数的合成如下暗示:将两个四元数的合成运用于几何体意味着“把几何体绕axis2轴扭转rotation2角度,然后绕axis1轴扭转rotation1角度”.在这种情形下,Q暗示绕单根轴的扭转,该扭转是先后将q2和q1运用于几何体的成果.运用四元数,运用程序可以盘算出一条从一根轴和一个偏向到另一根轴和另一个偏向的腻滑.合理的路径.是以,在q1和q2间插值供给了一个从一个偏向变更到另一个偏向的简略办法.当同时运用合成与插值时,四元数供给了一个看似庞杂而现实简略的操纵几何体的办法.例如,假想我们愿望
27、把一个几何体扭转到某个给定偏向.我们已经知道愿望将它绕axis2轴扭转r2度,然后绕axis1轴扭转r1度,但是我们不知道最终的四元数.经由过程运用合成,我们可以在几何体上合成两个扭转并得到最终单个的四元数.然后,我们可以在原始四元数和合成的四元数间进行插值,得到两者之间的腻滑转换.Direct3D扩大(D3DX)对象库包含了帮忙用户运用四元数的函数.例如,D3DXQuaternionRotationAxis函数给一个界说扭转轴的向量增长一个扭转值,并在由D3DXQUTERNION构造界说的四元数中返回成果.别的,D3DXQuaternionMultiply函数合成四元数,D3DXQuaternionSlerp函数在两个四元数间进行球面线性插值(spherical linear interpolation).Direct3D运用程序可以运用下列函数简化对四元数的运用.Direct3D运用程序可以运用下列函数简化对三成员向量的运用.D3DX对象库供给的数学函数中包含了很多帮助函数,可以简化对二成员和四成员向量的运用.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1