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