只有一个矩阵的一个缺点是操作会相互影响。iE 如果你做一个 scale(2,2,2),而不是一个 translate(2,2,2),你的模型将在 everey 轴上移动4,而不是像你想象的那样移动 2。旋转也有同样的问题,但更难理解;)
下一个问题是 scale() 和 rotate() 总是使用原点,这意味着如果你想旋转或缩放,你必须考虑你当前的平移在哪里,并用这个值进行计算。这很难做到。
要找到如何缩放/平移/旋转的策略,您必须考虑在对象生命的哪个阶段要做什么。建设与后来的运动。
但是,您可以通过将现有的矩阵操作结合在一起来实现“更好的”矩阵操作。IE伪代码
scale(float[3] s, float[3] originPoint)
将被实施为
translate(-originPoint); scale(s); translate(originPoint);
和
rotate(float alpha, float[3] p1, float[3] p2)
将被实施为
translate(-p1); rotate(alpha, p2-p1); translate(p1);
而且,根本不使用 scale() 会让生活更轻松。
干杯,弗兰克