Sep 25, 2008

3Dカッチンアプレット

作ろうとしていたものが何となくそれらしく動き出したので、一旦ここに貼っておく。
3Dカッチンアプレットのページへのリンク
ソースコード

一応、衝突したら弾き合うのだが、わかりづらい。どうしたらわかり易くなるのだろう。
衝突したら赤く光るチェックボックスを付けてみたが、やはりわかりづらい。
3Dだと仕方ないのだろうか。

See more ...

Posted at 22:06 in Java | WriteBacks (0)
WriteBacks

Sep 14, 2008

Java3Dアプレット試作

Java3Dを触り始めたので、何か作ってみようと思って作り始めたのだが、想定したものが意外に難しいことがわかってきて、挫折気味である。しかし、その途中段階でできたテストアプリが、自己満足に浸れるくらいには興味深く動いたので、一旦区切りをつけて、公開することにする。

何らかのアプレットのページへのリンク
・ソースコード
 J3DTest2.java
 TimerBehavior.java
 TimerBehaviorProcess.java

Java3D(OpenGL)のイベントのスケジューラーはAWTやSwingのそれとは別であり、例えばAWTやSwingのパーツに対してrepaint()してもCanvas3Dは再描画されない。Java3Dのイベント処理モデルに合わせるには、Behavior(javax.media.j3d.Behavior)というクラスを継承するクラスでイベントを処理する必要がある。
Java3Dでアニメーションするには、その理由により、java.util.Timerやjavax.swing.Timerを使ってAWTやSwingで処理するだけではうまくいかず、Canvas3D、Bounds(BoundingBox,BoundingSphere etc.)に関連付けたBehaviorに処理を渡さないといけない。Java3Dのアニメーションをさせるだけなら、java.util.Timerやjavax.swing.Timerを使うよりBehaviorを使う方が賢明だと思われる。
とりあえず、javax.media.j3d.WakeupOnElapsedTimeのを使って周期的にBehaviorを動かせるようなので、今回のアプリでは、それを使ったTimerBehaviorというのを定義している。
一定の速度の移動や一定周期の回転や一定の拡大率の拡大など、変化量が一定なアニメーションなら、なんとかInterpolatorというBehaviorを使えばシンプルである。今回できたアプレットもInterpolatorを使うと美しく書けるのかも知れないが、拡張性を求めて敬遠した。

See more ...

Posted at 00:59 in Java | WriteBacks (0)
WriteBacks

Sep 06, 2008

Java3Dのアプレットを公開する方法

Java3Dがインストールされていない環境でもJavaアプレットでJava3Dを動かす方法があることを知ったので、試しに簡単なアプリを公開する。

Java3Dアプレットのページへのリンク
ソースコード

コードは、Java3Dのデモパッケージに入っているHelloUniverse.javaに少し味をつけただけのものである。この3次元世界にあり得ない動きなので、ちょっと気持ち悪いかもしれない。

Canvas3dのインスタンスを貼り付けたAppletのクラスを、普通にHTMLの<applet>タグで公開すると、Java3Dのランタイムがインストールされていない環境では実行できない。しかし、org.jdesktop.applet.util.JNLPAppletLauncherを使って起動するように公開すると、(メジャーな環境では)Java3Dのランタイムがインストールされていなくても実行可能になる。

より具体的な方法は、Java3Dがインストールされた環境で動くJavaアプレット(Canvas3dのインスタンスを貼り付けたAppletのクラス)をJAR形式で用意し、AppletLauncherのページにある通りに、下記のようなHTMLで起動を指示する。少々長いが、最低限の設定なら、触る所は
・width/heightの部分
・アプレットの指定部分(下記で言うと、2ヶ所あるHello4dUniverseの部分)
・subapplet.displaynameの部分
くらいで良いと思う。

<applet code="org.jdesktop.applet.util.JNLPAppletLauncher2"
  width=400 height=400
  archive="Hello4dUniverse.jar,
               http://download.java.net/media/applet-launcher/applet-launcher.jar,
               http://download.java.net/media/java3d/webstart/release/j3d/latest/j3dcore.jar,
               http://download.java.net/media/java3d/webstart/release/j3d/latest/j3dutils.jar,
               http://download.java.net/media/jogl/builds/archive/jsr-231-webstart-current/jogl.jar,
               http://download.java.net/media/gluegen/webstart/gluegen-rt.jar,
               http://download.java.net/media/java3d/webstart/release/vecmath/latest/vecmath.jar">
  <param name="codebase_lookup" value="false">
  <param name="subapplet.classname" value="Hello4dUniverse">
  <param name="subapplet.displayname" value="My Java 3D Applet">
  <param name="jnlpNumExtensions" value="1">
  <param name="jnlpExtension1" value="http://download.java.net/media/java3d/webstart/release/java3d-latest.jnlp">
  <param name="progressbar" value="true">
  <param name="noddraw.check" value="true">
</applet>

See more ...

Posted at 19:08 in Java | WriteBacks (1)
WriteBacks

applet+code-でつながるブログリング

applet+codeに関するブログをまとめています。[link]

Posted by at 01/07/2009 10:30:38 PM