[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Java3Djp:00374] トピックスから Java3D FAQ (1999.2.19)
■■■■■■■■■■■■人間関係を円滑に!!■■■■■■■■■■
■私と友人・私と恋人・上司と部下・教師と生徒・親と子・自分探し■
■ 各種講座・カウンセリング・カウンセラー養成・企業研修 ■
■月間相談数600件 カウンセラー30名在籍 15年の実績 ■
■ TMA 東京メンタルヘルスアカデミー 東京・千葉・大阪■
■■■■■■■■■http://www.nayami.com/tma/■■■■■■■■■■
遠藤です。
今日のお昼に安藤さんのページを見たら、もう Java3D FAQ があってびっくりしました。
>皆さんのコメントを反映させた draft version 000.002 を web に置いときました。
>これを叩き台にしてください。
>
>http://tech.webcity.ne.jp/~andoh/java/3d/j3faq.html
了解です。トピックスから抽出した FAQ です。
●トピックスから Java3D FAQ (1999.2.19) yasuyuki@xxxxxxxxxx
[Q] どのプラットホームが Java 3D をサポートしますか?
現時点 (1999年2月現在) では、
Solaris (SPARC)、
Win32 (Windows 95/98, Intel CPU の NT 4.0)
だけです。
[Java3Djp:00035]
[Java3Djp:00038]
[Java3Djp:00040]
[Java3Djp:00043]
[Java3Djp:00050]
[Java3Djp:00054]
[Java3Djp:00075]
[Q] Java 3D を JDK1.1.X ベースで動かす方法はありますか?
Java 3D 1.1 正式版からは Java 2 (JDK 1.2) でのみ動作します。
ちなみに、
JDK 1.1 ベースで 3DCG プログラミングをする手段としては、
OpenGL-Java binding があります。
また、シーン・グラフベースのものとしては、
OpenGL Optimizer Java binding、OpenInventor-Java があります。
[Java3Djp:00142]
[Java3Djp:00143]
[Q] VRMLローダーの入手方法は?
下記から VRML Loader/Player をダウンロード出来ます。
ソースコードも公開されています。
http://www.vrml.org/WorkingGroups/vrml-java3d/
[Java3Djp:00101]
[Java3Djp:00102]
[Q] HelloUniverseの立方体を別のプリミティブに代えるには?
objTrans.addChild(new ColorCube(0.4));
この new ColorCube(0.4) を、別のプリミティブに変更してください。
(例えば new com.sun.j3d.utils.geometry.Sphare() など)
[Java3Djp:00106]
[Q] 光源を設定したのに照明されないのですが?
物体に法線ベクトルが設定してあっても、
光源に照明の作用範囲が指定されていないと照明されません。
作用範囲オブジェクトである javax.media.j3d.Bounds
(実際にはそのサブクラス)を生成し、
javax.media.j3d.Light#setInfluencingBouns() メソッドで
作用範囲を指定してください。
[Java3Djp:00112]
[Java3Djp:00120]
[Q] マウス処理のBehaviorをBranchGraphにaddChild()したのにマウス操作できません?
光源と同様に、javax.j3d.Behavior (及びそのサブクラス) も
作用範囲の設定が無いと動作しません。
作用範囲オブジェクト javax.media.j3d.Bounds (実際にはそのサブクラス)
を生成し、setSchedulingBounds() メソッドで作用範囲を指定してください。
[Java3Djp:00121]
[Java3Djp:00139]
[Q] シーングラフに動的にNodeを付け加えると
javax.media.j3d.RestrictedAccessExceptionが発生しますが?
BranchGroup ではなく、TransformGroup に動的に Node を addChild() する場合、
いったん Node を removeChild() してから addChild() してください。
また、compiled モードの場合は動的に追加/削除できないので、
retained モードで行ってください。
[Java3Djp:00134]
[Java3Djp:00146]
[Q] addMouseListener()してもマウスイベントが通知されません?
java.applet.Applet を extend している場合、
コンテナである Applet のサブクラスに addMouseListener() しても
マウスイベントは通知されません。
Canvas3D に addMouseListener() してください。
[Java3Djp:00149]
[Java3Djp:00152]
[Q] スケーリングとはどのようなことをするのですか?
「スケール」= 「縮尺(縮小率・拡大率)」と考えれば解りやすいでしょう。
1.0 の時は実物大。0.5 の時は半分の大きさ、2.0 の時は倍の大きさです。
スケーリングは TransformGroup に対して適用しますが、
回転や移動を適用したい TransformGroup とは別にした方が良いでしょう。
(T) 回転や移動を適用したい TransformGroup
|
(T) スケーリングを適用したい TransformGroup
|
(S) Shape3D など
[Java3Djp:00191]
[Java3Djp:00192]
[Q] Canvas3Dのpaint()メソッドのオーバーライド方法は?
(Canvas3D のバックバッファの取得方法がわからないので保留...)
[Java3Djp:00215]
[Java3Djp:00221]
[Q] TransformGroupから任意のNodeを remove したいのですが?
Groupから継承するクラスなどの中で、
以下のようなメソッドを定義して利用してみてください。
public boolean remove(Node node) {
for (int n=0; n<numChildren(); n++) {
if (getChild(n) == node) {
removeChild(n);
return true;
}
}
return false;
}
[Java3Djp:00150]
[Java3Djp:00154]
[Q] Behaviorを継承したクラスを書いたがイベントが1回しか通知されません?
proccessStimulus() の最後で wakeupOn() を呼んでください。
[Java3Djp:00209]
[Q] BehaviorとMouseListenerはどのように使い分ければ良いでしょうか?
物体の Rotate や Translate、Zoom などはこれ専用の Behavior があるので
Behavior を使うのが楽です。
Picking などの場合は MouseListener を使った方が楽です。
[Java3Djp:00216]
[Q] Quat4fをset後値が変なのですが?
これはバグのようです。
[Java3Djp:00212]
[Java3Djp:00213]
[Java3Djp:00220]
[Q] 法線を計算したいのですが
com.sun.j3d.utils.geometry.NormalGenerator というクラスがあります。
まず com.sun.j3d.utils.geometry.GeometryInfo に
頂点座標の Point3d などの配列、頂点インデックスの int 配列をセットしておき、
NormalGenerator の public void generateNormals(GeometryInfo geom) で
法線を計算できます。
例:
GeometryInfo ginfo =
new GeometryInfo(GeometryInfo.TRIANGLE_ARRAY);
ginfo.setCoordinates(verts); // verts は Point3d の配列(頂点データ)
ginfo.setCoordinateIndices(indices); // indices は int の配列 (頂点index)
NormalGenerator ngen = new NormalGenerator();
ngen.generateNormals(ginfo);
Shape3D shape =
new Shape3D(ginfo.getIndexedGeometryArray());
[Java3Djp:00006]
[Q] SimpleUniverseで表示できる範囲は?
原点 (x=0.0、y=0.0、z=0.0) を中心とした ±1.0 の範囲のようです。
また、ニアークリップ面 (視点にもっとも近いクリップ面) は 0.1、
ファークリップ面 (視点からもっとも遠いクリップ面) は 10.0 です。
これより近くても遠くても、物体は描画されません。
[Java3Djp:00100]
[Q] pickingをするには?
com.sun.j3d.behaviors.picking.PickObject クラスを使用します。
詳しくは下記を参考にしてください。
[Java3Djp:00139]
[Java3Djp:00147]
[Java3Djp:00155]
[Java3Djp:00211]
[Java3Djp:00218]
pick されたオブジェクトを特定するには、
javax.media.j3d.SceneGraphObject#setUserData()/getUserData() メソッドで
独自のデータを付加/取得すると良いでしょう。
[Q] com.sun.j3d.utils.behavior.mouse パッケージと
com.sun.j3d.utils.behavior.pickingパッケージはどう違うのか?
com.sun.j3d.utils.behavior.mouse パッケージの Behavior は、
適用対象の TransformGroup をはじめに設定しておきますが、
com.sun.j3d.utils.behavior.pickingパッケージの Behavior は
マウスプレス時のマウス座標にいちばん近い TransformGroup を pick し、
その pick した TransformGroup に対して操作を適用しているようです。
[Java3Djp:00203]
[Q] VRMLに書き込むクラスはありますか?
CyberVRML97 があります。ソースコードも公開されています。
http://www.cyber.koganei.tokyo.jp/vrml/cv97/cv97java/index.html
[Java3Djp:00119]
[Java3Djp:00148]
[Q] Java3Dでマウスを使って線を引く方法は?
[Java3Djp:00152]
[Q] SwingでJava3Dは使えるのか?
Java3D の Canvas3D は Light-weight コンポーネントではないため、
描画がおかしくなる場合があります。
現時点では AWT を使うのが無難です。
Sun (JavaSoft) は Java3D と Swing をうまく共存させるよう努力中のようです。
考えられる方法としては、
(1) Java3D の改良。オフスクリーン・レンダリングなどを使い、
Light-weight コンポーネントの中でも Java3D が描画出来るようにする。
(2) Swing の改良。Swing の中で Java3D のような Heavy-weight コンポーネントを
うまく描画出来るようにする。
の2通りの方法を考えているようです。(1)は描画のパフォーマンスが悪いかも知れません。
[Java3Djp:00196]
[Java3Djp:00201]
[Java3Djp:00204]
>## [Q] 書籍『Java 3D API仕様』を読むと眠くなるのですがどうしたら良いでしょうか?
>## .... というのは追加していません :-)
# その記事は「Java3D にせ FAQ」ですかから...^^;
------------------------------------------------------------------
遠藤靖之 (えんどう やすゆき) <yasuyuki@xxxxxxxxxx>
http://www.javaopen.org/jfriends/ (Java互助会ホームページ)
株式会社タイムインターメディア 情報通信サービス部 TEL 03-5362-9009
〒162-0065 新宿区住吉町3-11 新宿スパイアビル FAX 03-5362-9008