JavaFX 3D分子の例で3つのXForm-Objectsのなぜ
質問
Oracle Documentation のAltableSampleAppに関連している質問があります。。関数buildCamera()
では、Xform
型の3つのオブジェクトを作成し、さらにカメラを3番目に追加します。なぜ私はこの3つのネストされた `xform-オブジェクトが必要なのですか?事前にありがとう!
private void buildCamera() {
root.getChildren().add(cameraXform);
cameraXform.getChildren().add(cameraXform2);
cameraXform2.getChildren().add(cameraXform3);
cameraXform3.getChildren().add(camera);
cameraXform3.setRotateZ(180.0);
camera.setNearClip(0.1);
camera.setFarClip(10000.0);
camera.setTranslateZ(-cameraDistance);
cameraXform.ry.setAngle(320.0);
cameraXform.rx.setAngle(40);
}
. 解決
確かに、私はJavaFX 3Dリソースの見えている真空のように苦労してきました、そして私が見つけたいくつかの資源の徹底的な不足。しかし、私は満足している推測を思いついています。
変換は分割され、ネストされているので、順番に実行されます。
具体的には、各Node
(およびそれを使用しているクラスはNode
のサブクラスです)には、独自の変換リストがあります。 Group
クラスは、他のJavaFX Node
sの一般的なコンテナになることができる限り、設計されたNode
の特別なサブクラスです。 Group
のOracle Documentation
グループに適用される変換、効果、または状態は、そのグループのすべての子に適用されます。
XForm
(すべての可能な変換をまとめてバンドルするGroup
サブクラス)のインスタンスは、外部変換を適用し、次に内側の変換を内側にも適用されます。
変換は非常によく命名されていませんが、XForm
はX / Y回転専用に使用されています。回転が軸の周りに行われるので、注文(および拡張子、ネスティング)は重要です。まず翻訳すると、シーンがユーザーの入力に意図的な方法で反応するようになります。
*私が知ることができる限り、Z回転(サンプルアプリに一度は正確に設定されています)が、JavaFxのデフォルトのY DOWNの代わりにY軸が上向きになるように使用されます。これにより、それらをJavaFXの自身の向きでレンダリングすることを可能にしながら、一般的に受け入れられているX / Y / Z軸方向に形状を追加することができます。
他のヒント
私は、これがアフィン変換を露出させることなく、滑らかな「正確な」変換を行うことができた方法であると考えています(これは3Dではるかに関連性がはるかに関連しています)。