- ベストアンサー
HTMLで設定したPARAM値(半径と高さ)を認識できず3Dで円筒表示しません
- Java3Dで円筒と円錐物体を描きマウス操作に併せてグリグリ動くアニメプログラムを作成しようとしています。
- しかし、HTMLで設定した円筒の半径と高さの値を認識できず、円筒が表示されません。
- No2のプログラム内部に問題があると考えられますが、JAVA初心者の私はどこに問題があるのかわかりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
createObjectsメソッドで生成していたcylinderをinitメソッド内で行うだけで構いません。インデントは全角スペースなので注意。 import java.applet.Applet; (中略) public class Sample3D extends Applet{ // Cyinder String rad, height; float cylinderR; float cylinderH; Cylinder cylinder; // この行追加 Appearance ap; // この行追加 public void init() { rad = getParameter("cylRad"); //パラメータ cylDiaの値を受け取る if(rad==null) rad="0.075"; cylinderR = Float.valueOf(rad).floatValue(); height = getParameter("cylHeight"); //パラメータ cylHeightの値を受け取る if(height==null) height="0.6"; cylinderH = Float.valueOf(height).floatValue(); // 以下追加 BranchGroup bg = new BranchGroup(); cylinder = new Cylinder( cylinderR, cylinderH, Cylinder.GENERATE_NORMALS, 50, 1, ap); TransformGroup tg = new TransformGroup(); tg.addChild(cylinder); bg.addChild(tg); objTrans.addChild(bg); // ここまで } (中略) public BranchGroup createObjects(){ BranchGroup Root = new BranchGroup(); // ここにシーングラフの追加を行う // ローカル座標の設定(TransformGroup) objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTrans.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND); // この行を追加 Root.addChild(objTrans); (中略) // オブジェクト // float cylinderR = 0.075f; // float cylinderH = 0.6f; ap = createAppearance(); // ここ修正 //Cylinder cylinder = new Cylinder( cylinderR, cylinderH, Cylinder.GENERATE_NORMALS, 50, 1, ap); ここコメントアウト Cone cone = new Cone( 0.3f, 0.6f, Cone.GENERATE_NORMALS, 50, 1, ap); //objTrans.addChild(cylinder); ここコメントアウト objTrans.addChild(cone); Root.compile(); return Root; } (以下略)
その他の回答 (1)
- lailai2580
- ベストアンサー率64% (16/25)
initメソッドより先にcreateObjectsメソッドが呼ばれてしまっているようです。 cylinderを生成する直前のcylinderRとcylinderHの値が0になってます。 initメソッドでcylinderを生成してobjTransにぶら下げると良いのでは?
補足
lailai2580さん、早速アドバイスいただきありがとうございます。 cylinderを生成するよりも前に、cylinderRとcylinderHの値が0になっているということはわかるのですが、initメソッド内に cylinderだけを生成するのかconeも併せて生成するのか、また具体的にどのようにobjTransにぶら下げるのかなど、プログラムを書き換えるがわかりません。 java初心者なもので、ここまでは他の方が作成されたプログラムをみようみまねできたものですから、詳細プログラムで示していただけるとありがたいのですが。 よろしくお願いします。
お礼
早速、ご丁寧にコメント入りでプログラムソースに手を加えていただきありがとうございました。 訂正していただいたように書き換えて、実行したところできました。 また、htmlファイルでパラメータの値を変えて、幾つかのケースで確かめ、全てのケースできちんとできました。 今回は、円筒図形についてだけパラメータを設定しましたが、更に追加構造物(TriangleStripArrayなど)も加え、これらにもパラメータを設定しようと考えています。近々トライするつもりです。 これらの結果についてもおってお知らせしたいと思います。 どうもありがとうございました。 尚、お礼のポイントも、おって贈らせていただきます。 また、何か不明点が生じましたら、よろしくお願いします。