Javaゲーム制作記

いろいろ作ってます  

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | Comment(-)

テクスチャマッピング&JOGL!

Poly3Dにテクスチャをマッピングする機能をつけました。

・・・しかしここで大きな壁が。
下の画像は小さな箱に地球のテクスチャを貼り付けたものです。


きれいにできてます。
問題ありません。
ところが・・・



大きくしてみると
「ん?テクスチャがゆがんでる・・・?」

この画像では目立ちませんがテクスチャをしましまにすると一目瞭然。

こ れ は ひ ど い

実はこれ、パースペクティブをOFFにすると目立ちません。

UV座標を単なる線形補間で埋めているため、下の図のようにパースをかけたときに折れ曲がってしまうみたいです。


これを防ぐための方法を探したんですが・・・
なかなか載ってない。
載ってない。
ようやく見つけて実装してみたところ・・・


上手くいきました。
歪みがないですね。

・・・しかしここでまた大きな壁が。

それは・・・

遅い!

ピクセル単位で除算を行わなければいけないため
これを処理するのに20ms近くかかってます。
これはもうほぼ論外なわけで。
60FPSで表示しようと思ったら1フレームを16ms以内で処理する必要があります。
もうオーバーしています。
まだ箱一つなのに・・・

そこでJavaでOPENGLを使うためのライブラリJOGLを使ってみたところ・・・

テクスチャの補間にバイリニアを使ってるみたいです。
気になる処理時間は・・・

0.15ms

( ゚д゚)

150倍・・・


O| ̄|_

OTL

orz


さすがは並列処理が得意なGPU、といった所でしょうか。
まだまだ最適化する必要がありますね・・・

GPU強し。
スポンサーサイト
[ 2010/02/26 16:28 ] 3D | Comment(3)

3Dエンジン 点光源の追加!

7000アクセスを突破しました!
7000!
みょーに漂う7000踏まなくてよかった感w
これからも頑張ります!
__________________________________
前回言っていたライトの種類を増やしました!!
点光源を増やしました。
よーするに豆電球だと思ってくれればいいですw
普通に紹介してますがその過程は並大抵ではありませんでした・・・

1、座標変換時の混乱
2、ポリゴンの中心と光源とを結ぶベクトルの混乱
3、何故かZ軸が逆!?

1は3Dを扱う上でどうしようもないと思われます。

2は
「終点-始点 が向かうベクトルじゃないの?」
「あれ?これいつ変換したんだっけ・・・」
という風に気がついたら位置情報がぐちゃぐちゃになってますO| ̄|_
こんな簡単な作業に小一時間も・・・

3は理由がわからなかったのでとりあえずZ値に-1を掛けておきました(ほんとは理由を突き詰めるべきですが・・・)。

やっとの思いで完成した点光源を二つ配置、赤と緑の色をつけてみました。

点光源

おおっ!
それらしくできたところで完成。

ついでにアプレット化しました
続きからどうぞ。
[ 2010/02/23 19:14 ] 3D | Comment(3)

3Dエンジン 名前決定&色付きライト!

3Dエンジンの名前を「Poly3D」に決めました!
機能もどんどん増やす予定です。

とりあえずライトの複数追加とライトに色を設定できるようにしました。
今のところ追加できるライトは

・平行光(Directional Light)
・環境光(Ambient Light)

です。
スポットライトや点光源も増やしたいなー・・・
後フォグも追加したい・・・
しかしあんまり欲張るとろくなことにならないので注意です

ライブラリーの様子↓


パッケージ強し
ちなみに他のライブラリと名前が重複しないように最初に「P3D」をつけてます。


カラーライトの様子をアプレットにしました!
続きからどぞ↓
[ 2010/02/22 19:46 ] 3D | Comment(2)

3Dエンジンライブラリー化

今まで行き当たりばったりで3Dエンジンを作ってきましたが、
そろそろライブラリー化することを考えながら作ろうと思ってます。
つまり一度ソースコードを書き直さないといけません・・・
物理エンジンではこれを5回ほどやりましたO| ̄|_

ライブラリの座標系ですが、
座標系は右手座標系を使おうと思ってます。
X座標が右向き、
Y座標が上向き、
Z座標が手前向きです。

物理エンジンJPR2との合成も一応ですができました。
こんな感じです。

まあまあいいかと。

この調子でライブラリー化に向けてがんばります!

P.S.
ホームページを更新しました。(リンク切れ)
前よりきれいになっていると思います。
古いリンクは全てリンク切れになります;;

P.SのP.S
作業風景です。
Eclipseパンクしそうw
ソースコードもちらっと見えるので参考までに。
[ 2010/02/21 10:08 ] 3D | Comment(3)

アプレットで3D表示!

ついにアプレットで3D表示をするところまできました・・・。
まだ完全ではないですが(特に処理速度)、ぐだぐだ書くより公開しちゃおうということで、公開に踏み切りました。
自分のマシンだと、Render timeのところが5~8あたりでした。
他の処理も考えると2~3ミリ秒で終わってほしいですね・・・

とりあえず操作方法
回転:左ドラッグ
Pers/Orthoの切り替え:右クリック

ではライブラリの早期完成を願いつつ(P.S.今は亡き・・・)続きをクリックしてください↓
[ 2010/02/18 12:18 ] 3D | Comment(3)

いろいろレンダリング

3Dエンジンが出来たのが嬉しくて、いろいろレンダリングしてしまいました。
それと、描画できる図形を増やしました。
・箱
・球体(分割数指定)
・円柱(分割数指定)
・円錐(分割数指定)
・筒(分割数指定)
とりあえずはこれで大丈夫。

とりあえずレンダリングしたのがこちら↓

泥団子のつもりです。
球体ですが分割数は横200×縦400です。
さすがに重く、描画に0.2秒ほどかかってしまいました。
グーローシェーディングをすればもう少し早く表示出来るんだろうけど・・・


続いてはこちら↓

こちらは泥ではない普通の団子です
球体と円柱を使用しました。
ゲームに使うときは分割数をもっと下げる必要があります。

完成したらいつか配布する予定です。



前回のポリゴンの描画色の計算にミスがありました。
スペキュラ色のところですが、


normal:面の法線ベクトル
focus:視線ベクトル(普通は 0,0,1)
light:平行光の方向ベクトル

※normal,focus,lightは全て正規化すること!

refrection = normal * (2 * normal・light) - light;
specular = spec * pow(max(focus.dot(refrection), 0), material.power);

・・・あとはRGB成分にspecularを足しこむ


でした。
通りで視点を変えても光らないわけだ・・・
ちなみに全てローカル座標系ですのでご注意を。
[ 2010/02/15 16:09 ] 3D | Comment(3)
プロフィール

saharan

Author:saharan

Twitter
検索フォーム


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。