缩放矩阵和翻译矩阵相关的问题

时间:2011-03-29 07:56:29

标签: c++ vector matrix transformation

您好
我正在为3D中的实体(比如实体1)设置单向缩放矩阵。现在,我有另一个实体(实体2)跟随这个实体,它应该具有统一的缩放。我应用于这两个实体的Matrix序列如下......

  1. 将entity1从原始世界位置翻译为原点
  2. 单向缩放
  3. 将实体翻译回世界的位置。
  4. 这很有效。但是,如果我对实体2遵循相同的顺序,则它不起作用。我在世界坐标系中进行所有矩阵变换。

    这是我在计算机图形学惊人世界中的第一步。我将不胜感激,如果有人可以通过各种协调系统(世界,模型,本地)和 指导我如何计算从模型坐标系到世界坐标系的矩阵,反之亦然 提前谢谢,
    阿图尔

2 个答案:

答案 0 :(得分:1)

“世界”坐标系使用完全未修改的矩阵来表示世界上的所有对象。这是在宏观方案中查看所有对象位置的最简单方法。

“模型”坐标系非常类似于“局部”坐标系的概念。 “局部”坐标系根据局部对象定义坐标系,因此,例如,(0,0)可以是该局部坐标系中对象的中心,而正Z轴可以向下看对象视图。 “模型”坐标系本质上与此相同,但是如果你与OpenGL混淆,你有一个MODELVIEW矩阵,这个矩阵基本上是当前使用的“局部”坐标系。您可以对此“模型”矩阵执行操作,以便从世界坐标系到本地坐标系,到另一个本地坐标系,到另一个本地坐标系等等。

如果您对直接从“世界”坐标系转换为对象的任何“局部”坐标系感兴趣,我认为this was a really great article可能会帮助您。为了使用此解决方案,您需要为要找到“本地”坐标系的对象提供向前,向上和侧向量(在“世界”坐标项中)。

我希望这有助于澄清一些事情! :)

答案 1 :(得分:0)

我会先尝试回答你的最后一个问题,希望能让事情变得更清楚。

每当图形艺术家创建建筑物,怪物或风景时,她都需要定义坐标系。它包含原点(其中是0,0)和一些(x和y方向在哪里?)。选择完全是任意的,并没有真正的重要性,但为了简单起见(并且为了减少由于缺乏精度而导致的误差),原点通常要么接近物体的中心,要么接近参考点(例如树的根)。

现在艺术家应该收集怪物并在景观中建造,坐标可能不匹配。她本可以用风景创造这座建筑,虽然这并不总是可行的,更不用说了,但是对于怪物在一些可怜的MMO玩家之后奔跑,这是不可能的。

因此,我们需要一种方法来了解手臂,腿,牙齿,触须和其他任何您不希望看到的东西,在怪物运行时最终会出现在世界上。他们的位置相对于怪物非常了解。这就是我们可能称之为怪物坐标的东西。更一般地说,我们会调用本地坐标,这意味着怪物的本地坐标。

那么世界坐标是什么?通常它们指的是最有意义的参考,被认为不会移动其他东西的元素。在这里,风景。

这是矩阵发挥作用的地方。 什么是矩阵?矩阵是一个运算符,它允许在不同的坐标系中表示坐标。这是一个从系统到另一个系统的坐标系的投影:从怪物到场景,从场景到相机,从相机到屏幕......

矩阵可以表示从一个系统到另一个系统的任何转换:平移,旋转,缩放,剪切,展平......或者所有这些转换同时进行。 单位矩阵是不会改变任何内容的矩阵。矩阵也可以组合:通过乘以平移矩阵和旋转矩阵,我们得到转换然后旋转的结果变换矩阵。这样做几次,只需将每个关节的矩阵组合在一起,就可以得到机器人关节臂尖端在汽车工厂的位置。

然后我们遇到问题所在:翻译然后旋转与旋转然后翻译不同。如果你不相信它自己尝试:走路然后转弯或转弯然后走路,看看你怎么不在同一个地方结束。所以最后它意味着必须以特定的顺序应用矩阵,这仅取决于你想要做什么。

根据您给出的解释,我怀疑这是您遇到问题的地方,因为如果您先缩放,翻译会产生不同的结果。