2010-07-19 (月)
*JavaでOpenGLはかなり疲れる
Javaだと行列やベクトルがとても扱いにくい…
とりあえず,Octreeで表現したボクセルから必要な面を取り出した.で,ガタガタだと解像度低く感じるので適当に滑らかにした.前に似たようなの書いたときは,法線だけいじってごまかしたのですが,頂点を移動するのも計算量的にはほとんど同じなのでこっちの方がいいですね.ただ,あまり綺麗にかけなかった.
途中までマーチングキューブ法でやろうかと思ったのだけど,変な例外処理とかが入りそうでいやだったので,使いませんでした.
隙間はわざとあけてあります.
レンダリング自体は結構早いな.昨日試したときは,Javaのプログラムの方がネックだったみたい.ひとつの頂点配列に詰めてしまえば10万ポリゴンくらい表示しても大丈夫そうだった.
それでも不安なので,不要なところはボクセルを荒くするか….そのためには,解像度が違うボクセルモデルを滑らかに繋ぐ方法も考えないといけない.
???
内部で使っているFloatBufferに変な誤差(?)が入る原因不明のバグに悩まされた.しかも初回起動時は大丈夫で,アプリケーションを閉じたり開いたりしていると出てくる.
問題が起こっている関数は見つけたのだけど,引数に渡される値は同じなのに計算結果が違う….内部で参照しているのは,引数で渡された値と,スレッドが生成された後は書き換わるはずの無いデータだけ….その関数内にデバッグ用のコードを入れると,問題が再現しなくなるので,これ以上は分からない.
何が起こっているのかさっぱりわからないので,なんとなくsynchronizedにしたら問題が出なくなった.何か間違ってるんだろうか.気持ちが悪いなぁ.