jiaoyanzu/WULI/ShowArticle. aspx?articleId=440&classId=4 你想在绘制模型之前独立地移动、旋转并/或缩放它们。 你可以设置对象的世界矩阵完成这个功能,而矩阵是可以存储任何变换(平移、旋转或缩放等操作)的对象。旋转矩阵。你可以简单地使用XNA框架提供的基本步骤创建一个变换矩阵: 第一个步骤创建一个平移矩阵,你可以定义将模型沿着X、Y和Z方向移动的距离。第二个步骤让你可以缩放模型,第三个步骤返回绕X、Y和Z轴旋转的矩阵。
你可以乘以这些矩阵组合多个变换,但必须按照正确的顺序,对于双色球工具箱。这会在本教程中讨论到。 当将模型绘制到屏幕上时,会将它的初始位置放置在3D空间的(0,0,0)点上,而最常见的操作就是让模型在3D场景中移动。
这很简单。在Draw步骤中定义一个时间变量代表程序开始以来经过的秒数(精确起见使用毫秒,然后除以1000)。然后定义一个矩阵保存沿X轴方向的平移,看着旋转矩阵。而平移量由当前时间决定: 当将这个矩阵设置为世界矩阵时,可以让模型以每秒一个单位的速度沿x方向移动。下面的代码使用这个矩阵绘制模型:提供。 要让模型中的所有部分都在正确的位置,你看福彩字谜。需要使Bone变换作为世界矩阵的一部分 (可见教程4-9学习bone变换的更多知识)。对于你可以简单地使用XNA框架提供的基本方法创建一个变。但这次,你通过将bone变换矩阵与平移矩阵相乘将两者组合起来,一定要将世界矩阵放置在乘式的右边,因为在矩阵乘法中顺序是很重要的。当你运行这个代码时,模型会缓缓地沿着x轴活动。
对于缩放和旋转步骤类似。试着使用下面得世界矩阵:双色球旋转矩阵工具。 开始时time = 0,模型看不见,明天双色球号码。随后慢慢变大。想知道双色球旋转矩阵工具。一秒后达到原始大小,之后会继续变大。接下来使用这个矩阵: 模型会延续地绕y轴旋转。你知道双色球工具。 通常情况下,你会组合多个变换作为世界矩阵。例如,
因为这是一个小例子,所以使用下列世界矩阵: 这个组合矩阵将作为模型的世界矩阵。但是你可以用另一种方式组合这两个矩阵: 当你运行程序后会发现结果是不同的。后面已经提到,对于旋转。在矩阵数学中,乘法的顺序是很重要的,接下来我将讨论这个问题。 在矩阵数学中,将矩阵M1乘以矩阵M2的结果通常与将M2乘以M1的结果是不同的,在下面的章节中,我会讨论所有可能的组合。
有一个规则(或者说是技巧)你必须记得:相比看创建。在矩阵乘法中,M1*M2就是"M1在M2之后"的意思。旋转矩阵乘法的顺序是很重要的,这是因为当你首先绕A1轴旋转然后绕A2轴旋转,那么绕A1轴的旋转会在绕A2轴旋转前改变A2轴!
例如,其实旋转矩阵公式。M1表示绕向右轴旋转90度,M2表示绕向上轴旋转90度。旋转矩阵公式。
首先看一下M1*M2的情况,它的意思是"在绕向上轴之后绕向右轴旋转。简单。"想一下结果会如何。在这种情况中,你的右手臂始终对着向右方向。你首先绕向上轴旋转90度,这样你会面向左方,如图4-2左图所示。当你看一下右手臂,你会发现它跟着你一起旋转!所以当你绕向右轴旋转90度后,想知道方法。你会面朝下躺倒在地,如图4-2的右图所示。 下面看一下第二种情况M2*M1,表示"在绕Right轴旋转后绕Up轴旋转。"你首先绕你的向右方向旋转,一个。结果是面朝下,如图4-3的左图所示。你的向上方向变成了水平,即世界坐标系的向前方向。然后当你绕这个向前方向旋转时,结果是你面朝侧面,听听双色球工具。如图4-3的右图所示! 如你所见,对比一下双色球缩水工具。M1*M2和M2*M1会招致不同的结果,矩阵。这是因为当组合两个旋转时,第二个旋转轴会受到第一个旋转地影响。 在这种情况中,乘法的顺序仍是重要的。在这个例子中,M3表示绕Up轴旋转90度,旋转矩阵。M4表示沿x轴方向移动10个单位。 M3*M4表示"平移后旋转,"模型会首先移动到新位置。然后绕Up轴旋转,这两步如图4-4所示。 M4*M3的情况不同。首先整个坐标系(包括模型和x轴)绕Up轴旋转90度,如图4-5左图所示。双色球工具箱。然后,模型沿着旋转过的x轴移动10个单位。但初始的x轴已经旋转了,本来它位于你的右方,但现在在你的前方!这意味着你实际上是沿世界坐标系向前的z轴在做平移。 缩放和平移的乘法顺序还是重要的。本例中。学会框架。M5表示缩放0.5倍,你知道xna。M6表示沿x轴平移10个单位。 M5*M6表示先平移后缩放。所以首先模型向右沿x轴平移10个单位,然后缩小,如图4-6所示。 M6*M5的情况中你首先将整个坐标系(包括模型和x轴)缩小,基本。然后缩小的模型沿着缩小的x轴移动10个单位。因为x轴也缩小了一半,所以只移动了相当于5个单位!结果是模型移动的不够远,如图4-7所示。 幸运的是,有些变换无需考虑乘法的顺序。学习使用。例如,组合两个平移矩阵是安全的,想知道双色球工具箱。因为模型只是简单地移动了两次。两个缩放变换的组合也是安全的。
例如,先放大2倍再缩小10倍和先缩小10倍再放大2倍结果是一样的。最后,缩放不影响旋转,反之亦然。旋转矩阵。这是因为只会缩放坐标轴,但轴之间的角度仍保持90度不变。所以当缩放矩阵和旋转矩阵相乘时,你可以不消考虑乘法的顺序。
译者注:你知道可以。在《Microsoft XNA Game Studio Creator's Guide》一书的第5章提到一个小技巧:使用I.S.R.O.T.作为矩阵组合的顺序通常就是你想要的结果,此处I.S.R.O.T. 分别代表Identity,Scale,Revolve,Orbit,Translate。 下面的代码组合了旋转和平移矩阵:旋转矩阵。 //draw model float time = (float)gameTime.TotalRealTime.TotalMilliseconds/10 00.0f; Matrix worldMatrix = Matrix.CreateScale(0.005f)* Matrix.CreateRotationY(time / 10.0f) * Matrix.CreateTranslation(time, 0, 0); myModel.CopyAbsoluteBoneTransformsTo(modelTransfor ms); foreach (ModelMesh mesh in myModel.Meshes) { foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.World = modelTransforms[mesh.ParentBone.Index] * worldMatrix; effect.View = fpsCam.ViewMatrix; effect.Projection = fpsCam.ProjectionMatrix; } mesh.Draw(); }
双色球工具箱
你看你可以简单地使用XNA框架提供的基本方法创建一个变
想知道双色球旋转矩阵工具
你知道双色球工具
转矩
0 Response to “旋转矩阵?你可以简单地使用XNA框架提供的基本方法创建一个变”