私のコードでは、デフォルトのパースペクティブを減らす必要がありますandroid.graphics.Camera
。公式 API によると、デフォルトではその位置は (0,0,-8) に設定されていますが、この方法を使用してsetLocation(float,float,float)
視点を (0, 0, -24) に戻し、その結果、スキュー効果。
残念ながら、このようなメソッドは API 12+ でのみ利用可能であり、Romain Guy は twitter で確認しました。その便利なメソッドを使用せずに同じ結果を得るには、行列の値を手動で設定する必要があります。したがって (私が間違っていなければ)、独自のマトリックスを生成し、それをCamera
オブジェクトから取得したものと連結する必要があります。
Camera
クラスは残念ながら純粋な Java ではありませんが、SkCamera3D
Skia 2D フレームワーク ( SkCamera.hおよびSkCamera.cpp ) に実装されたネイティブ クラスの単純な JNI ラッパーです。
コードを掘り下げると、このクラス内に保持されている行列は次のように表現できることがわかりました。
| scaleX skewX transX |
| skewY scaleY transY |
| persp0 persp1 persp2 |
しかし、正直なところ、ネイティブ コード内のトリッキーな数学をすべて理解することはまだできず、必要なものを取得するために行列の値を自分で変更する方法もわかりません。この種のマトリックスがどのように機能するかについて、誰かがリファレンス実装を教えてくれますか?