gpt4 book ai didi

android - Camera.translate 和 Matrix.preTranslate 或 Matrix.postTranslate 之间的区别?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:11 24 4
gpt4 key购买 nike

我们使用 Camera在 Canvas 上做 3D 变换。我们通常旋转相机并得到它的矩阵然后翻译它。但相机也有 translate方法。使用方法的结果是不同的。

我的问题是:Camera.translate 和 Matrix.preTranslate 或 Matrix.postTranslate 有什么区别?

最佳答案

两者兼而有之的原因是矩阵乘法必须按特定顺序进行才能获得正确的结果(正如您可能已经知道的那样)。

平移/旋转/缩放的顺序在您输入时以相反的顺序完成。

所以如果你这样做:

Camera.rotate(15, 0, 0);
Camera.scale(.5f, .5f, .5f);
Camera.translate(70, 70, 70);

您首先平移 70、70、70,然后在所有方向上缩放 50%,然后绕 X 轴旋转 15 度。

所以 Matrix 有一个前后翻译(好吧,前和后一切),因为也许你想先实际旋转它 15 度,然后翻译它,最后缩放它。

这样就可以回答前后翻译。现在 Camera 具有直接旋转和平移的原因是为了那些已经知道它是如何工作的人(比如我!),所以我从不使用 Matrix 或 Camera 来解决这个问题,因为我可以直接在 Canvas 上简单地进行旋转和平移。只要您知道平移、缩放和旋转是以相反顺序完成的,您也可以。

另外,如果你知道我告诉你的,它会给你更多的力量。您可以执行一系列 10 个矩阵,而无需将它们包围在每个矩阵的多个 Matrix 对象中(例如,您想要执行向外摆动并绕中心旋转以模拟离心力的摆动运动)。这需要通过多次旋转和平移(被传递给彼此的多个 Matrix 对象包围)来完成,但是如果您知道每个翻译是如何工作的,您可以简单地执行一系列 .translate()、.rotate()、和.scale()。

如果您曾经做过 3D 图形,此信息特别有用,因为那时这些矩阵会让人头疼。

希望对您有所帮助!

关于android - Camera.translate 和 Matrix.preTranslate 或 Matrix.postTranslate 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com