私はすべてのシーンオブジェクトが.obj
ファイル(それらはBlenderからエクスポートされる)からロードされるアプリケーションを持っています。そして、私はこのオブジェクトの1つを特定のポイントの周りに回転させる必要があります。私は回転する必要があること、Java3Dの特定の点を中心に回転
public void rotateTo() {
// translate to origin, rotate, translate back
Vector3f origin = new Vector3f();
Vector3f pivot = new Vector3f(.0f, .5f, .0f);
this.getTransform(this.transform);
this.transform.get(origin);
double angle = -Math.PI/2;
double newX = origin.getX() + Math.cos(angle) * (pivot.getX() - origin.getX()) - Math.sin(angle) * (pivot.getY() - origin.getY());
double newY = origin.getY() + Math.sin(angle) * (pivot.getX() - origin.getX()) + Math.cos(angle) * (pivot.getY() - origin.getY());
this.transform.set(new Vector3f((float)newX, (float)newY, .0f), 0.15f);
this.setTransform(this.transform);
this.transform.set(origin, 0.15f);
this.setTransform(this.transform);
}
this
がTransformGroup
オブジェクトを指し、this.transform
はTransform3D
オブジェクトを参照:現在、私は次のコードを持っています。
しかし、この方法は期待通りに機能しません。私もthisとthisのソリューションを試しましたが、私のためにも機能しませんでした。
おそらく、GeometryArray
の助けを借りてこの操作を実行しようとしていますが、これを行う方法を理解できません。また、原点を変えてオブジェクトをエクスポートしようとすることもできますが、それはクリーンな解決策ではないと思います。コードで正しい位置に移動する必要があるからです。ここで
は私のオブジェクトです:
私は緑の点の周りに回転させるようにしようとしているが、すべてのケースでは、赤い点を中心に回転し、または全く回転しない、または一部に変換します回転なしの点。
P.S. Java3Dは古いライブラリであり、より強力なツールを使用することができますが、私の大学教授の要件であり、使用を拒否することはできません。
大変ありがとうございます。私は逃してしまった、 'set ...'メソッドは既存の変換を上書きする。 – vanelizarov