質問

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 Nodesの一般的なコンテナになることができる限り、設計されたNodeの特別なサブクラスです。 Group のOracle Documentation

グループに適用される変換、効果、または状態は、そのグループのすべての子に適用されます。

XForm(すべての可能な変換をまとめてバンドルするGroupサブクラス)のインスタンスは、外部変換を適用し、次に内側の変換を内側にも適用されます。

変換は非常によく命名されていませんが、XFormはX / Y回転専用に使用されています。回転が軸の周りに行われるので、注文(および拡張子、ネスティング)は重要です。まず翻訳すると、シーンがユーザーの入力に意図的な方法で反応するようになります。

*私が知ることができる限り、Z回転(サンプルアプリに一度は正確に設定されています)が、JavaFxのデフォルトのY DOWNの代わりにY軸が上向きになるように使用されます。これにより、それらをJavaFXの自身の向きでレンダリングすることを可能にしながら、一般的に受け入れられているX / Y / Z軸方向に形状を追加することができます。

他のヒント

私は、これがアフィン変換を露出させることなく、滑らかな「正確な」変換を行うことができた方法であると考えています(これは3Dではるかに関連性がはるかに関連しています)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top