Java3Dで作成した横置き回転スクリュー軸のパラメータ授受

このQ&Aのポイント
  • Java3D(アプレット)で作成した横置き回転スクリュー軸のパラメータ授受についての質問です。
  • Java3Dとアプレット方式を使用し、円筒とスクリューで構成される横置き回転スクリュー軸のプログラムを作成しました。
  • しかし、パラメータの受け渡し部分を修正しても正常に表示されません。どの部分を改めれば良いか具体的な指示を教えてください。
回答を見る
  • ベストアンサー

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
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

呼ばれたので来ました(違) アニメーション辺りになってくると私もよく分かりません…。 RotationInterpolatorが使い難くて。 さて、 前回同様initメソッドより先に軸やスクリュー部分のパラメータ設定をしてるので、initメソッド内でそれをやれば良いかと思います。 具体的には、まず createShape3Ds1メソッド内の shaftR、shaftspanの宣言部をコメントアウト。 createShape3Ds2メソッド内の innerR1、outerR1、span1、m1、innerR2、outerR2、span2、m2の宣言部をコメントアウト。 コンストラクタ内の // 第1 BranchGroupオブジェクト 軸(第1物体-shapes1) for( Node shape1 : createShape3Ds1() ) {  branch13.addChild( shape1 );  System.out.println(shape1); } // 第2 BranchGroupオブジェクト スクリュー(第2物体-shapes2) for( Node shape2 : createShape3Ds2() ) {  branch23.addChild( shape2 );  System.out.println(shape2); } をコメントアウト。 コンストラクタ内 or createSceneGraph1 or createSceneGraph2メソッド内(どこでも可)で branch13.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); branch23.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND); を追加。 initメソッドの最下部に // 第1 BranchGroupオブジェクト 軸(第1物体-shapes1) BranchGroup bg1 = new BranchGroup(); for( Node shape1 : createShape3Ds1() ) {  bg1.addChild(shape1); } branch13.addChild( bg1 ); // 第2 BranchGroupオブジェクト スクリュー(第2物体-shapes2) BranchGroup bg2 = new BranchGroup(); for( Node shape2 : createShape3Ds2() ) {  bg2.addChild( shape2 ); } branch23.addChild( bg2 ); を追加。

taihey
質問者

お礼

lailai2580さん、早速回答いただきありがとうございました。 教えていただいた通りにプログラムソースを直し、トライした結果、解決いたしました。 更に、htmlファイル上でパラメータを変えて、それに応じて形状が変ることも確認いたしました。(一部、私の思い違いで計算式・記述に誤りがあることも露見しました。これについては、ゆっくり直したいと思います。) 結果並びに訂正後のプログラムを、No4として加え、下記にアップしました。 本当にどうもありがとうございました。お礼のポイントは近日中にマークいたします。 http://www.geocities.jp/java3dtest/QA03/question3.html

関連するQ&A

  • 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
  • Javaアプレットでゲーム作成するのにまとめたライブラリなどはあるので

    Javaアプレットでゲーム作成するのにまとめたライブラリなどはあるのでしょうか? 当方Javaは未経験です。 C++、Delphi、PHP、Physonでのプログラム経験はあり、 Delphiでも簡単なゲームを作った事が有りますし、C++で3Dゲーム作成・WindowsAPIでもDirectXでもゲームを作った事があり、スクリプトエンジンの作成だったり、ゲームの基本的なループの取り方だったり、物理的な描写の方法とかは大丈夫です。 今回WEBに埋め込めるJavaAppletで簡単な2Dゲームを作ろうと思い、DXライブラリのように必要な関数をまとめたライブラリや解説しているサイトを検索してみたのですが見つからず… そのような物ってJavaにもあるのでしょうか? 図形描写、画像描写、オフスクリーン等…主に描写関係の物のライブラリがあれば大感激です。 総合開発環境もEclipseかNetBeansか悩んでいるのですが、やはりまだJavaの開発ではEclipseが優秀でしょうか?

  • Javaの初期化メソッドについて

    こんにちは。Javaの初心者です。 Javaの初期化メソッド(initメソッド)についてなのですが、処理を記述しても実行してくれません。 恐らく使い方が間違ってるかと思われるのですが、ネットで調べてもあまり検索結果がでてこなかったので、質問させてもらいました。 以下サンプルコード import java.lang.*; public class Test { static int a; public void init() { a = 10; } public static void main(String[] args) { System.out.println(a); } } 実行してみても、「0」と表示されるだけで、「10」と表示してくれませんでした。 どこかコードが間違えてるのでしょうか? それとも初期化メソッドはアプレット用であってアプレットで使わないと意味がないというものなのでしょうか? 因みに関係ないかと思われますが、グローバル変数は自動的に初期化される(0が代入される)ということは知っています。 ご教授の方、よろしくお願い致します。

    • ベストアンサー
    • Java
  • VectorWorks2008 3D多角形作成時のパラメーターについて

    VectorWorks2008 3D多角形作成時のパラメーターについて 質問です。 現在VectorWorks2008(Mac)を使用しています。 3D多角形を作成するときデータバーが出るのですが、そこで入力できる数値がI,J,K(作業平面に対するカーソルの相対位置)だけしかありません。 X,Y,Z(基準平面に対するカーソルの相対位置)を、3D多角形作成時に入力できるようにはどうすればよいでしょうか??? また、作成した3D多角形を選択すると、データパレットの「形状」にはX,Yは表示されるんですがZがありません。深さ(高さ?)はあるのですが。。。 以上2点、どなたかご存じの方がいらっしゃいましたらよろしくお願いします。

  • Eclipseを用いたJARファイル作成について

    Eclipseを用いてjavaのプログラムをしているのですが アプレットのプログラム"のみ"がJARファイルにエクスポートできずに困っております。 [プロジェクト]を右クリック→[エクスポート]→[JARファイル]に設定するところまでは良いのですが 「JARマニフェスト仕様」というページの、「アプリケーションのエントリー・ポイントのクラスを指定」という項目で、メインクラスを参照しても アプレットのプログラムのクラス"のみ"が表示されていないのでエクスポートできません。コンソールのプログラムのクラスは表示されているので おそらく、アプレットにはmainメソッドを用いていないので表示されないのだと思うのですが・・・。 mainメソッドがないプログラムの場合はどうすれば良いのでしょうか・・・? 自分なりに、↓など調べてみたのですがどこがいけないのかわかりません。 http://mailsrv.nara-edu.ac.jp/~asait/java/applet/applet.htm http://sunjava.seesaa.net/article/57546363.html どこをどうすればこの場合、EclipseでJARファイルが作成できるのか、詳しく教えていただければ助かります。 一応、アプレットは↓の簡単なプログラムを試してみました。実行は出来ます。 import java.applet.Applet; import java.awt.Graphics; public class Sample extends Applet { public void paint(Graphics g) { g.drawString("こんにちは",10,10); } }

  • 【Java】画像表示が出来ない!

    Java初心者です。 Eclipseを使って、Javaアプレットでjpeg画像を表示させようとしたのですが、上手くいきません。表示したい画像をインポートして、このようなコードを書きました。 import java.applet.Applet; import java.awt.*; /* <applet code="クラス名.class" width="497" height="600"> <param name="img" value="img/test.jpg"> </applet>*/ public class クラス名 extends Applet { Image img; public void init() { img = getImage(getDocumentBase() , getParameter("/test.jpg")); } public void paint(Graphics g) { g.drawImage(img , 0 , 0 , this); } } Javaアプレットで実行しても、アプレットは真っ白なままです。GIF画像でも試してみましたが、同じく失敗でした。他のJavaアプレットのプログラム(図形を表示したり)は成功したので、私のパソコンのJavaは問題ないと思います。回答よろしくお願いします。

    • ベストアンサー
    • Java
  • Java3Dで三角形を回転させたい

    Java3D初心者です。 三角形を表示しy軸回転をさせて円すいのような形を作りたいのですが、なかなか進みません。 とりあえず三角形をを表示させるプログラムを作り、 それをRotationInterpolatorクラスに従って回転させるプログラムを作りたいのですが、エラーが出てしまいます。 ご指摘お願いします。 三角形プログラム↓ import java.applet.Applet; import java.awt.BorderLayout; import java.awt.event.*; import java.awt.GraphicsConfiguration; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.*; import javax.media.j3d.*; import javax.vecmath.*; public class Sample3D3 extends Applet {  public BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup();     TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objTrans);     Point3d[] vertices = new Point3d[3]; vertices[0] = new Point3d(-0.9, 0.5, 0.0); vertices[1] = new Point3d(-0.9, -0.9, 0.0); vertices[2] = new Point3d(0.0, -0.9,0.0); TriangleArray geometry = new TriangleArray(vertices.length,GeometryArray.COORDINATES);     geometry.setCoordinates(0, vertices);     Shape3D shape = new Shape3D(geometry);     objRoot.addChild(shape);     objRoot.compile();     return objRoot;} public Material material3; public TransformGroup transformGroup4; public Transform3D transform3D4; public Sample3D3() { setLayout(new BorderLayout()); GraphicsConfiguration config =            SimpleUniverse.getPreferredConfiguration();     Canvas3D c = new Canvas3D(config); add("Center", c);     BranchGroup scene = createSceneGraph(); SimpleUniverse u = new SimpleUniverse(c);  u.getViewingPlatform().setNominalViewingTransform();     u.addBranchGraph(scene);} public static void main(String[] args) { new MainFrame(new Sample3D3(), 400, 400); } } 回転プログラム↓ import java.applet.*; import java.awt.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.applet.MainFrame; public class Jikken extends Applet { public Jikken() { Canvas3D canvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); BorderLayout borderLayout = new BorderLayout();  this.setLayout( borderLayout);  this.add( canvas3D, BorderLayout.CENTER); SimpleUniverse simpleUniverse = new SimpleUniverse(canvas3D);  simpleUniverse.getViewingPlatform().setNominalViewingTransform(); BranchGroup objRoot = new BranchGroup(); DirectionalLight directionalLight = new DirectionalLight(); TransformGroup transformGroup = new TransformGroup(); Sample3D3 sample3D3 = new Sample3D3(); BoundingSphere boundingSphere = new BoundingSphere(); transformGroup.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE); Alpha alpha = new Alpha(); RotationInterpolator rotationInterpolator = new RotationInterpolator(alpha,transformGroup); rotationInterpolator.setSchedulingBounds(boundingSphere); directionalLight.setInfluencingBounds(boundingSphere); transformGroup.addChild(rotationInterpolator); transformGroup.addChild(sample3D3); objRoot.addChild(transformGroup); objRoot.addChild(directionalLight); simpleUniverse.addBranchGraph(objRoot); } public static void main(String[] argV){ Jikken jikken = new Jikken(); MainFrame mainFrame = new MainFrame(jikken,500,500); } } これで回転プログラムを実行すると、 型 Group のメソッド addChild(Node) は引数 (Sample3D3) に適用できません。という内容のエラーが表示されます。 読みにくくてすみませんがよろしくお願いします。

    • ベストアンサー
    • Java
  • Javaで作成した3D画像をIEに表示したいのですが・・

    以下のプログラムをIEで表示したいのですが、その方法が分かりません。 どこをどのように変更すれば表示できるようになるのでしょうか?(ちなみにappletviewerでは問題なく表示できます。) 回答をお待ちしています。 import java.applet.*; import java.awt.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.universe.*; import com.sun.j3d.utils.picking.behaviors.*; import com.sun.j3d.utils.applet.MainFrame; /*アプレットの作成*/ public class Fusen extends Applet { public Fusen() { //3D描画内容(省略します) } /*作成したクラスファイルの呼び出し*/ public static void main( String[]argV ){ Fusen fusen = new Fusen(); //Fusenクラスのインスタンスを生成 MainFrame mainFrame = new MainFrame(fusen, 500, 500); //MainFrameクラスのインスタンスを生成 } }

    • ベストアンサー
    • Java
  • JAVAアプレット レイアウトの変更

    JAVAアプレットのinit()の部分にラベルやボタンをきれいに設置するためGridLayoutを使って配置したのですが、ボタンを押したあとに今あったGridLayoutの場所の新しいレイアウトで新しいラベルを配置することはできるのでしょうか? 一応アプリケーションの場合は違うコンストラクターの新しいインスタンスを作成してやればいいなとおもったのですがアプレットの場合はどうすればいいのか分からず困っています。 どなたかよろしくお願いします。

  • 12/18~12/22でMySQL Commandline Clien

    12/18~12/22でMySQL Commandline Client のAjax+JavaBeans版を作成中。 「明日までに」ということで焦っています。 なぜなら、リモートメソッドが完全動作しないからです。 Eclipse 3.3 Europe Version: 3.3.2 TOMCAT 5.5 JAVA 5.0 DWR <Java リソース>  +--- dbAccess/DirectDAO.java <------ OK!  +--- sqlService/DirectSQL.java <---- ダメ! <WebContent>  +--- DWR/interface/DirectDAO.js、DirectSQL.js  +--- WEB-INF/web.xml <web.xml> <init-param> <param-name>classes</param-name> <param-value>sqlService.DirectSQL</param-value> </init-param> <init-param> <param-name>classes</param-name> <param-value>dbAccess.DirectDAO</param-value> </init-param> <DirectSQL.js> // Provide a default path to dwr.engine if (dwr == null) var dwr = {}; if (dwr.engine == null) dwr.engine = {}; if (DWREngine == null) var DWREngine = dwr.engine; if (DirectSQL == null) var DirectSQL = {}; DirectSQL._path = '/mwc/dwr'; DirectSQL.doCmd = function(p0, callback) { dwr.engine._execute(DirectSQL._path, 'DirectSQL', 'doCmd', p0, callback); } (1)DirectSQLのみの時は、DirectSQL.doCmd()がDWRテストページでテスト可。 (2)DirectSQLのみの時は、DirectSQL.doCmd()をJavaScript関数から呼び出し可。 (3)DirectDAOを追加後は、DirectDAO.XXXXX()がDWRテストページでテスト可。 つまり、二つのリモートメソッドクラスを同時に使えないということです。 <質問>一体、なぜ、二つのリモートメソッドクラスを同時に使えないのでしょうか? 当方、Javaを知って6ヶ月という初学者です。 どうぞ、宜しく回答のほどお願いします。

    • ベストアンサー
    • Java

専門家に質問してみよう