忍者ブログ
場所取り そのうち引っ越すかも http://maglog.jp/gltest/
[1] [2] [3]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。





やっと修士論文が終わった・・・

リアル生活があまりにも危うく、なんだかんだ言って実に4ヶ月もの間、更新なしであった。開発はちょくちょくしていたのだが、blogを更新する余裕は全くなかった。

今回は大きな変更はなく、細部の詰めが主である。

  • ウィンドウ内ウィンドウのサイズ変更が可能になった。
  • 地上のマップをウィンドウ内ウィンドウに表示するようにした。また、標高データからビットマップを生成したことで、衛星写真的な地図になった。
  • 太陽系マップの実装。
  • 天体の楕円軌道の実装。時刻に対する天体の位置を厳密には解いていないが、定性的にケプラーの法則に従っているっぽい動きにした。
  • これに伴い、数多くの実際の天体のデータを正した。天文学でいう軌道要素をデータファイルに記述する形式にすることでメンテナンスやカスタマイズを容易にした。
  • 宇宙戦闘で「シールド」を実装。一定量のダメージを吸収し、時間とともに回復する球状のフィールドとして表現した。普段は見えないが、弾丸などの干渉を受けると可視化する。
  • 天体の描画を行うとき、座標系ツリーに対して再帰的に処理することができるようにした。これで描画順のソートと視野クリッピングが若干高速になったと期待される。

変更点はこれだけではないが、追い追い更新しながら紹介していこうと思う。
PR
しばらくこの動画を作るのに集中していた。うまくいかなかったけどね・・・



再びモデルデータはhttp://vierzero.blog53.fc2.com/からいただきました。
gltestss35.jpg gltestss36.jpg

asteroid.png


自然に見えるアステロイドを自動生成する方法を考えてみた。

最も簡単な実装は、経緯線で区切った球体メッシュの頂点をランダムにオフセットするというものだが、このランダムに一様乱数を使うと近隣の頂点との相関がないためにギザギザなアステロイドになってしまう。この方法は土星の環の粒子の描画などで用いていた。

画像のようなある程度の滑らかさを持つアステロイドを生成するために、二次元の Perlin Noise を試してみた。

gltestss75.jpg gltestss76.jpg gltestss77.jpg



Mitaka を参考にして、銀河系をレイトレーシングでリアルタイムボリュームレンダリングしてみた。どうやらやっと宇宙らしくなってきた。


 
いまどき Applet なんてやってる人少ないみたいだけど、個人的にかなり苦労した点についてメモしておく。

Applet クラスは getImage とか getAudioClip というメソッドを持っていて、 Applet が置かれているのと同じサーバにあるリソースファイルをロードできるようになっている。ファイルの保存や、他のサイトのファイルへのアクセスは、セキュリティ上の理由からできない。

Java のコンパイル済みオブジェクトはクラス単位のファイルに分かれるため、プログラムの規模が大きくなるとクラスファイルの数が膨大になるという特徴がある。これを一つにまとめる方法が Jar ファイルで、複数のファイルをまとめて圧縮しつつ、解凍なしで実行できるというものだ。

となると、プログラム内で使っている画像や音声などのリソースも、 Jar ファイルにまとめたいと思うのが自然な流れだ。特に Web 上で公開する Applet だと、一つひとつのリソースファイルの為に一々 http コネクションを開くのは無駄なトラフィックを増やすからして、全ての関連ファイルを一つにすることでロード時間の短縮が見込まれる。

だが、そうすると Applet から getImage などのメソッドを使ったアクセスが普通にはできなくなる。具体的には

getImage(getCodeBase(), fname);

のような呼び出しが上手くいかない。ローカルで file:// のアクセスなら上手くいくのに、 http だとダメだという理不尽な動作をする。

これを解決するには、次のようにする。

        try{
            String url = "jar:" + getCodeBase() + jarname + "!/" + fname;
            ret = getImage(new URL(url));
        }catch(MalformedURLException err){
            System.out.println(" exception raised");
        }

なんだかよくわからないが、 jar プロトコルみたいなものの中に http URL を記述しなければならないようだ。
この例で url という文字列の中身はこんなふうになる。

jar:http://gltest.bufsiz.jp/Kashiwamochi063/Kashiwamochi.jar!/images/a.gif

以下にこの方法でひとつの Jar ファイルにまとめた Applet のサンプルを示す。


忍者ブログ [PR]
カレンダー
04 2024/05 06
S M T W T F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
gltest
性別:
非公開
自己紹介:
バーコード
ブログ内検索
アクセス解析