HTMLで設定したPARAM値(半径と高さ)を認識できず3Dで円筒表示しません

このQ&Aのポイント
  • Java3Dで円筒と円錐物体を描きマウス操作に併せてグリグリ動くアニメプログラムを作成しようとしています。
  • しかし、HTMLで設定した円筒の半径と高さの値を認識できず、円筒が表示されません。
  • No2のプログラム内部に問題があると考えられますが、JAVA初心者の私はどこに問題があるのかわかりません。
回答を見る
  • ベストアンサー

HTMLで設定したPARAM値(半径と高さ)を認識できず3Dで円筒表示しません

Java3Dで円筒と円錐物体を描きマウス操作に併せてグリグリ動くアニメプログラムで、円筒のみ半径と高さをHTMLでパラメータ設定し、その値を受けて表示3Dの表示サイズが変化するプログラムを作成しようとしています。 HTMLでPARAM設定をしない場合(No1)では意図通りに表示されていますが、PARAM設定をした場合(No2)では値設定をしていない円錐物体は表示されますが値設定をした円筒物体は表示されません。 プログラムソースで受け取る円筒の半径と高さの値がゼロと考えられます。そこで、HTML-プログラムソース間でのPARAM設定授受状態を確認するプログラム(No3)を作成したところHTMLで設定した値がプログラムに授受されたことは確認できました。 No2のプログラム内部に問題があると考えられますが、JAVA初心者の私はNo2のどこに問題があるのかわかりません。 下記のサイトを見ていただき、No2のプログラム(SAmple3D.java)の問題箇所指摘と修正プログラムを教えてください。 http://www.geocities.jp/java3dtest/QA02/question2.html

  • Java
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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;  } (以下略)

taihey
質問者

お礼

早速、ご丁寧にコメント入りでプログラムソースに手を加えていただきありがとうございました。 訂正していただいたように書き換えて、実行したところできました。 また、htmlファイルでパラメータの値を変えて、幾つかのケースで確かめ、全てのケースできちんとできました。 今回は、円筒図形についてだけパラメータを設定しましたが、更に追加構造物(TriangleStripArrayなど)も加え、これらにもパラメータを設定しようと考えています。近々トライするつもりです。 これらの結果についてもおってお知らせしたいと思います。 どうもありがとうございました。 尚、お礼のポイントも、おって贈らせていただきます。 また、何か不明点が生じましたら、よろしくお願いします。

その他の回答 (1)

回答No.1

initメソッドより先にcreateObjectsメソッドが呼ばれてしまっているようです。 cylinderを生成する直前のcylinderRとcylinderHの値が0になってます。 initメソッドでcylinderを生成してobjTransにぶら下げると良いのでは?

taihey
質問者

補足

lailai2580さん、早速アドバイスいただきありがとうございます。 cylinderを生成するよりも前に、cylinderRとcylinderHの値が0になっているということはわかるのですが、initメソッド内に cylinderだけを生成するのかconeも併せて生成するのか、また具体的にどのようにobjTransにぶら下げるのかなど、プログラムを書き換えるがわかりません。 java初心者なもので、ここまでは他の方が作成されたプログラムをみようみまねできたものですから、詳細プログラムで示していただけるとありがたいのですが。 よろしくお願いします。

関連するQ&A

  • Java3D(アプレット)で作成した横置き回転スクリュー軸のパラメータ授受

    前回の質問「HTMLで設定したPARAM値(半径と高さ)を認識できず3Dで円筒表示しません」(QNo.4083743)に続いての質問です。 今回は、Java3D、アプレット方式にて、1つの円筒と2つのスクリュー(TriangleStripArrayを使い作成)で構成される横置きスクリュー軸を作り、更にRotationInterpolatorを使い回転アニメーションのプログラムソースを完成させました。(下記URLのNo1) 前回同様、htmlファイル側のパラメータタグ<param name=" " value=" ">でスクリューの内半径、外半径、長さ、巻数などの値を与えて、プログラム側initメソッドで getParameterを使いこれらデータを受けとり、スクリュー形状などを変えて表示させたいと考え、パラメータの授受部分をinitメソッド部分に加えました。(下記URLのNo2とNo3) ところが、今回もinitメソッドより先に形状作成部分、回転アニメーション表示部分が実施されてしまうのかNo1で表示されるようは表示できません。 No2は、形状作成部分にパラメータで授受すべき値の一部を与えて、「アプレットは初期化されていません」のメッセージは表示されないようにはしましたが、暗黒画面のみでスクリュー軸は表示されません。 No3は、形状作成部分にパラメータで授受すべき値全てを与えて、No1と同じように表示させましたが、これではパラメータからの授受にはなっていません。 前回は、lailai2580 さんに、java初心者の私が作成中の未完成プログラムソースに手を加えていただき、パラメータ授受させて表示するようにしていただきましたが、そのときの教えを応用させることができずに、今回も教えていただきたくお願いします。 下記サイトのNo3プログラムソース(Sample3D.java)で、どの部分をどのように改めればよいか、具体的に示していただきたく、よろしくお願いします。 URL: http://www.geocities.jp/java3dtest/QA03/question3.html

    • ベストアンサー
    • Java
  • ボタンクリックで設計変更に応じるJava3D物体を作るには?(その2)

    ボタンをクリックすると、予めモニタ上のパラメータ欄に入力した数値(半径・高さ・配置位置-X方向変位など)に応じて、Java3D回転アニメーション(RotationInterpolator)で描いた円錐・直方体・円筒のサイズが変るプログラムを作りたいと取り組んでいます。 Java3D回転behaviorに対する同様の課題(QNo.4206209)では、lailai2580さんに教えていただき解決することができました。 このとき教えていただいたのと同様の方法を採り入れて、トライしてみました。下記URLに示すサイトでトライ1とトライ2をしてみました。 しかし、1物体(トライ2では中央に配置した赤直方体に対しパラメータ欄の第2物体-箱の設計条件を変えて「CHANGE」ボタンをクリックするとサイズが変るようになりましたが、他の2物体(右側の円錐、左側の円筒)を表示させることができません。 サイトのイメージに示す3物体何れに対しても設計条件を変えた後、「CHANGE」ボタンをクリックして、全ての物体に変化が生じ回転アニメーションを表示させるようにしたいのですが、今回は、3物体それぞれの回転数を変えるなどしており、BranchGroup を3つに分けて扱っていることなどがあって、Javaコーディングに疎い私は、ソースコードをどのように改めればよいかわかりません。 私が途中まで作成したソースコード(トライ2)のどの部分をどのように改めればよいか教えていただきたく、よろしくお願いします。 http://www.geocities.jp/java3dtest/QA08/question8.html

    • ベストアンサー
    • Java
  • 円運動の問題です。「なめらかな表面を持つ半径rの円筒が水平なゆかに接し

    円運動の問題です。「なめらかな表面を持つ半径rの円筒が水平なゆかに接して固定されている。質量mの小物体を最高点Aから、円筒軸に垂直かつ水平に、初速を与えて打ち出すとき、円筒面上を滑らず、ただちに円筒から離れて放物運動するようになる初速の最小値はいくらか」という問題なんですが、解答では「最高点でN≦0」と いう条件を使っていたのですが、Nが0より小さくなることなんてありえるんでしょうか?

  • OBJECTタグで、PARAMを使用するとActiveXコントロールが表示されない

    こんにちは。 今回の質問内容は、タイトルにあるように、 OBJECTタグでPARAMを使用すると、画面に何も表示されません。 PARAMを使わずに開いてみると、普通に開きます。 何かセキュリティ関係の設定を変更する必要があるのか、HTML等ソースを変更しなければならないのか分かりません。 何か分かる方がおられましたら、ご回答ください。 OBJECTタグのソース↓ <OBJECT ID="MainWindow" CLASSID="CLSID:ABCB59-5C9D-4D83-9A16-83AFFD73458" CODEBASE="test.CAB#version=1,0,0,0"> <PARAM NAME="test1" VALUE="100"> <PARAM NAME="Age" VALUE="100000"> <PARAM NAME="Name" VALUE="test"> </OBJECT

    • ベストアンサー
    • HTML
  • Java3Dで円錐台を描く方法を教えてください

    Java3Dで円錐台を描きたいのですが、その方法が思いつかず、ご存知のかたがいらっしゃいましたら教えてください。 Java3Dには、円錐や円筒などの物体は基本図形を描くcom.sun.j3d.utils.geometryクラスにConeクラスやCylinderクラスがあり簡単にできるのですが、私の場合円錐台を二段重ねで描きたい課題があります。加えてこの二段重ねの円錐台の中には円筒軸を配置したく、外側に配置する二段の円錐台を透明にしたいという希望もあります。 二段重ねの円錐台(外側配置:透明)と円筒軸(内側配置)を横置きにして 1) RotationInterpolatorを使い回転アニメを作成 2) Behaviorクラスを使いマウス操作で物体を動かす の2つのプログラミングを行いました。 共にConeクラスで配置位置を変えて、右に配置するConeの先端を隠す方法にて作成をしてみたのですが、1)については何とかそれらしいものが描けたのですが、2)については先端を隠すことができません。 また、2)については、物体の上をマウスでグリグリ動かすとマウスの動きに合わせて位置を変えることができるのですが、位置によっては円筒軸の色が消えて見難くなります。 更に1)と2)の両ケースともに、左右のconeの重ねた部分については、左側に配置したConeの先端部分の残像が表れてしまいます。 これらの問題を解決するには、どのようにしたらよろしいでしょうか?

    • ベストアンサー
    • Java
  • Javaの円錐を求めるプログラムについて

    mainメソッドで円錐の半径rと高さhの入力、 taisekiメソッドで円周率3.14を用いて円錐の体積の計算と計算した円錐の体積の表示 をするjavaプログラムを教えていただきたいです。 よろしくお願いいたします!!!!!!

    • ベストアンサー
    • Java
  • 【緊急】JavaでHTMLをきれいに表示させたい

    JavaでHTMLを表示させたいと考えているのですが、実際にプログラムを組んで起動してみると、元のページと比べてかなりずれてページが表示されてしまいます。 これを解決できる方法をご存知の方がいましたら、ぜひ教えてください。 お願いします。

    • ベストアンサー
    • Java
  • HTMLでメディアプレイヤーの再生回数をカウントして表示

    初めて質問します。 HTMLでWindows Media Player を埋め込んで指定のファイルを再生できるHPを考えています。 <OBJECT CLASSID="clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95" ID="MediaPlayer" width="280" height="45"> <param name=enableContextMenu value=false> <param name="TransparentAtStart" value="1"> <param name="AutoRewind" value="0"> <PARAM name="ShowStatusBar" value="0"> <PARAM name="Volume" value="true"> <PARAM name="ShowDisplay" value="0"> <PARAM name="ShowControls" value="1"> <PARAM name="ShowAudioControls" value="1"> <PARAM name="ShowPositionControls" value="true"> <PARAM name="AutoStart" value="0"> <PARAM name="fullscreen" value="false"> <PARAM NAME="FileName" VALUE="再生データ.wma"> </OBJECT> こんなタグを埋め込んで、wmaファイルを再生することはできるのですが、再生した回数をカウントして一緒に表示するというようなことをするにはどうしたらよいでしょうか。 HTMLの範囲内で出来ますか? 別の方法を使うと出来ますか? HP作成については素人なのですが、CGIとかそういったプログラムのようなものを使えば可能でしょうか? 具体的にそのための方法だったらもちろん嬉しいのですが、この言語を使えばできるから勉強してみたらいいよ、というようなアドバイスでも結構ですのでいただけたら嬉しいです。 よろしくお願いします。

    • ベストアンサー
    • HTML
  • 時間の表示&設定について

    はじめまして、Javaのプログラムの時間の表示&設定についてお伺い致します。 目的は 設定時間によりDOS画面に表示するコメントを換え、更にその内容をテキストファイルに保存するといったプログラムを組んでいます。 そこで 設定時間に幅がある場合(例えば11時~14時まで)はどの様にプログラムを組んだらよいのですか? 宜しくお願い致します。

    • ベストアンサー
    • Java
  • 配列の値をまとめる?

    いつもお世話になっております。 Javaプログラミングについて質問させてください。 プログラム中で配列を用意しています。 (String[] param = new String[7]) この配列には値が入っています。 (param[0]="000",param[1]="000",param[2]="000",param[3]="111",param[4]="111",param[5]="333",param[6]="333") 配列に入っている値は全部で7つですが、種類としては3つです。 ("000","111","333") 配列に入っている値を元に、上記の種類(3つ)を格納するようなメソッドはありますか? ご存知の方がいらっしゃいましたら、ご教授ください。 宜しくお願い致します。

    • ベストアンサー
    • Java