has*_*ian 6 camera android translate android-canvas
我们使用Camera在canvas中进行3D变换.我们通常旋转相机并获取它的Matrix然后翻译它.但是相机也有翻译方法.使用方法的结果是不同的.
我的问题是:Camera.translate和Matrix.preTranslate或Matrix.postTranslate有什么区别?
两者都有的原因是因为矩阵乘法必须按一定顺序完成才能获得正确的结果(正如您可能已经知道的那样)。
平移/旋转/缩放的顺序与您键入的顺序相反。
所以如果你做这样的事情:
Camera.rotate(15, 0, 0);
Camera.scale(.5f, .5f, .5f);
Camera.translate(70, 70, 70);
Run Code Online (Sandbox Code Playgroud)
首先平移 70,70,70,然后在所有方向上缩放 50%,然后绕 X 轴旋转 15 度。
所以 Matrix 有一个预翻译和后翻译(好吧,预翻译和后翻译),因为也许你想先将它旋转 15 度,然后翻译它,最后缩放它。
这就是翻译前和翻译后的答案。现在,相机具有直接旋转和平移功能的原因是对于已经知道其工作原理的人(例如我!),因此我从不使用矩阵或相机,因为我可以直接在画布上直接进行旋转和平移。只要您知道平移、缩放和旋转是以相反的顺序完成的,您也可以做到。
另外,如果你知道我告诉你的内容,它会给你更多的力量。您可以执行一系列 10 个矩阵,而无需将每个矩阵包围在多个 Matrix 对象中(例如,您想要执行向外摆动并绕中心旋转的摆动运动以模拟离心力)。这需要通过多次旋转和平移来完成(由多个相互传递的 Matrix 对象包围),但是如果您知道每个平移的工作原理,您可以简单地执行一系列 .translate()、.rotate()、和.scale()。
如果您曾经制作过 3D 图形,那么此信息尤其有用,因为这时这些矩阵就会让人头疼。
我希望这有帮助!
| 归档时间: |
|
| 查看次数: |
3553 次 |
| 最近记录: |