0

我有一个主要Viewport3DmCamera,由 控制TrackballDecorator。我想要的是创建另一个Viewport3D只有一个立方体来表示主视口上的当前相机方向。

这段代码:

Matrix3D TransformationMatrix = mCamera.Transform.Value;
// ?
OrientationCamera.Transform = new MatrixTransform3D(TransformationMatrix);

效果很好,除了我不想OrientationCamera将缩放应用为主缩放(我希望它只是旋转)。

我可以看到,在使用主相机进行缩放操作时,只有矩阵的值M11M22M33会发生变化,但是当我旋转它时它们也会发生变化,并且我尝试应用到这些值的任何更改都会导致我的预览立方体转换为意想不到的方式。

有谁知道如何ScaleTransform从转换矩阵中丢弃?或者也许还有另一种方法可以做到这一点?

4

1 回答 1

1

纯旋转矩阵中的前三行(或列)是单位向量。如果应用比例,这些向量不再是单位长度。您可以应用逆比例来摆脱比例。假设比例在所有三个方向上都相等:

var m11 = TransformationMatrix.M11;
var m12 = TransformationMatrix.M12;
var m13 = TransformationMatrix.M13;
var length = Math.Sqrt(m11 * m11 + m12 * m12 + m13 * m13);
var factor = 1 / length;
TransformationMatrix.Scale(new Vector3D(factor, factor, factor));
于 2014-06-02T07:09:09.213 回答