- ベストアンサー
Java3Dで三角形を回転させたい
- Java3D初心者です。
- 三角形を表示しy軸回転をさせて円すいのような形を作りたいのですが、なかなか進みません。
- とりあえず三角形をを表示させるプログラムを作り、それをRotationInterpolatorクラスに従って回転させるプログラムを作りたいのですが、エラーが出てしまいます。ご指摘お願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
うろ覚えで正確でないかもしれませんが、ポリゴンの裏側は普通描画されないことになっていたように思います。裏側を描画しないことで処理の重さが半分になるからです。(カリング) なので半回転して三角の表面だけ表示されていて、半分着て三角の裏側が見えるようになったら描画されないので見えないだけではないでしょうか。 Alphaの値を Alpha alpha = new Alpha(-1, 10000); <- 永久ループ、10秒で一周 とかにして、半周するのに5秒、見えない時間が5秒あるのであれば、その三角は回るには回っていて、裏側がデフォルトで描画されない(けど回ってはいるので、もう5秒したらまた見える)という動作を確認できますよね。 あえて裏側をみせたいのであればAppearanceを設定しないとならないはずです。 shapeをObjRootに追加する前に、カリングをオフにしたAppearanceを属性として追加したらできるはずですよ。 Shape3D shape = new Shape3D(geometry); ------ 以下を追加 -------- Appearance appearance = new Appearance (); PolygonAttributes pAttr = new PolygonAttributes(); pAttr.setCullFace(PolygonAttributes.CULL_NONE); appearance.setPolygonAttributes(pAttr); shape.setAppearance(appearance); ------ ここまで ---------- objRoot.addChild(shape);
その他の回答 (1)
- kyart
- ベストアンサー率57% (8/14)
transformGroup.addChild(sample3D3); のところですが、sample3D3というのはSample3D3のオブジェクトですが、元はAppletですよね?だからGroupの子要素としてはふさわしくないというエラーだと思います。 Sample3D3を見ますと、createSceneGraph()メソッドがGroupの子要素になれそうなBranchGroupを返しているようなので、 transformGroup.addChild(sample3D3.createSceneGraph()); としてみてはいかがでしょう?
補足
ありがとうございます! おかげさまでエラーが出なくなり実行することが出来ました。 感謝です。 ただこのプログラムで実行した場合、右半分がまったく表示されず、「回転している三角形が画面左側にきた間だけ見える」という状態になってしまします。 これは視点の問題だと思われますか? それとも平面三角形を回転させて、なんとなくでも円錐の形に見えるようにすることは不可能なのでしょうか…。 何度も申し訳ないですが、ぜひ助言をお願いしたいです。 補足:三角形の座標設定は vertices[0] = new Point3d(0.0, 0.5, 0.0); vertices[1] = new Point3d(-0.5, -0.5, 0.0); vertices[2] = new Point3d(0.0, -0.5,0.0); に変更しました。 最初のでは完全に逆ですね;すみません。
お礼
詳しいご説明、ありがとうございます! 無事ちゃんと回転させることが出来ました。 Appearanceの設定やなど知らなかったのでとても勉強になりました。 ほんとうにありがとうございました。 感謝です。