在我的代码中,我需要减少android.graphics.Camera
. 根据官方 API,默认情况下它的位置设置为 (0,0,-8),但我可以使用该方法setLocation(float,float,float)
将视点退回到 (0,0,-24),从而减少倾斜效应。
不幸的是,这种方法仅适用于 API 12+,并且 Romain Guy 在 twitter 上确认我必须手动设置矩阵值才能在不使用该便捷方法的情况下获得相同的结果。所以(如果我没记错的话),我必须生成自己的矩阵并将它与我从Camera
对象中得到的矩阵连接起来。
Camera
不幸的是,类不是纯 Java,而是一个简单的 JNI 包装器,用于SkCamera3D
实现到 Skia 2D 框架(SkCamera.h和SkCamera.cpp)中的本机类。
深入研究代码,我发现这个类中保存的矩阵可以表示如下:
| scaleX skewX transX |
| skewY scaleY transY |
| persp0 persp1 persp2 |
但老实说,我仍然无法理解本机代码中所有那些棘手的数学问题,而且我无法弄清楚如何自己更改矩阵值以获得我想要的东西。谁能指出我一些参考实现或(甚至更好)一些关于这种矩阵如何工作的详细解释?