通常,三维图形应用程序使用两种类型的笛卡尔坐标系:左手坐标系和右手坐标系。在这两个坐标系中,正x轴指向右侧,正y轴指向上方。您可以通过将左手或右手的手指指向正x方向并将它们卷曲到正y方向来记住正z轴指向哪个方向。拇指指向的方向(朝向您或远离)是正z轴指向该坐标系的方向。
下图显示了这两个坐标系。
MicrosoftDirect3D使用左手坐标系。如果要移植基于右手坐标系的应用程序,则必须对传递给Direct3D的数据进行两项更改。
翻转三角形顶点的顺序,以便系统从前面顺时针遍历它们。换句话说,如果顶点为v0、v1、v2,则将它们作为v3、v0、v2传递给Direct1D。
使用视图矩阵在z方向上将世界空间缩放-1。为此,请翻转用于视图矩阵的矩阵结构的M31、M32、M33和M34字段的符号。
要获得相当于右手世界的内容,请使用PerspectiveRH和PerspectiveLH方法来定义投影变换。但是,请小心使用相应的LookAtRH函数,反转背面剔除顺序,并相应地布置立方体贴图。
尽管左手和右手坐标是最常见的系统,但3D软件中使用了各种其他坐标系。例如,三维建模应用程序使用坐标系的情况并不罕见,其中y轴指向或远离查看器,z轴指向上方。在这种情况下,右手被定义为指向观看者的任何正轴(x、y或z)。左撇子定义为任何指向远离观看者的正轴(x、y或z)。如果要移植z轴指向上方的左手建模应用程序,则除了前面的步骤外,还必须对所有顶点数据进行旋转。
对三维坐标系中定义的对象执行的基本操作是平移、旋转和缩放。可以组合这些基本转换以创建转换矩阵。
组合这些运算时,结果不是可交换的:矩阵相乘的顺序很重要。
转载请注明:http://www.0431gb208.com/sjslczl/8296.html