dev logの最近のブログ記事
とりあえず手っ取り早く人形をフィールドに置いてみた。コバが萌えているのでスクリーンショット♪

いかがっすか?
DXFフォーマットって色情報がないんだよね。まあレイヤー毎の色番号みたいなのが記述できるんだけど、それってRGBじゃないし。よってちょー適当な配色で塗ってます。
やっぱりLightWaveフォーマット(lwo)を読み込むようにした方がいいのかな〜。そしたらボーンも付けられるんでそ?
悩ましい。
すでにだいぶ動いていた「ほげMMORPG」をごっそりMVC(モデル-ビュー-コントローラ)で書き換えた。色んなサンプルコードを見ながら建て増しをしてきたのでなんだか綻びが出てきたので、こりゃもうあかんということでメスを入れてみました。
コントローラであるメインのNSResponderがキーイベントやマウスイベントの処理を統括。
ビューはNSOpenGLViewね。初期化やフルスクリーンの処理なんかもここ。
モデルがそれぞれのシーン単位のオブジェクトになる。
ああ、すっきり。
たかまると考えてみたんだけど、FFにしろリネージュにしろ、剣と魔法のファンタジー世界じゃないすか。正義と悪がいて剣と魔法で戦う訳ですよ。ほげMMORPGはどんな物語になるんでしょーか。個人的にはスチーム系が好みなんですが、そうするとモデリング担当も辛かろうということで、木や石で出来た小屋でかまいません。
あとはシナリオですよ、シナリオー。
テキストが簡単にしかも綺麗に表示できるようになったので、チャットもどきを作ってみた。もどきなので、独り言しか言えません。
NSShadowっての使ってみた。テキストにシャドウを書けるヤツ。Mac OS Xのテキスト表示ってやっぱり綺麗だね。
入力されたキーをそのままバッファに貯めておいてリターンキーで送出するよくあるパターンです。
/ではじまるコマンドも多少組み込んでみた。なんだかコマンド入力タイプのRPGを彷彿とさせますな。
あとは、サーバ用意して本当のチャットにしたいんだけど、よろぴく > コバ
ちょっとご無沙汰のほげMMORPG。いろいろなサンプルを見ていたら、割と簡単にテキストを表示する方法があったので組み込んでみた。
OpenGLを使ってテキストを描画するのは結構面倒な作業になる。というのも、OpenGLには特にテキストを表示する仕組みが用意されていないので、自力でテキストをテクスチャーとして貼付けなくてはならないのだね。ちょっと検索すると文字を敷き詰めたテクスチャーを用意して、マトリクスで読み取る方法がちょくちょく紹介されている。文字コード表みたいなもんね。それって面倒だなあって思いつつAppleのサンプルコードを見てたら、Viewに文字列を描いてからビットマップとして取り出してテクスチャーとして使っていた。なるほどね。こりゃ便利ということで実装してみました。ひょっとして日本語だってオッケ!?と思ったんですが、どうもうまくいきません。
まあいいや。というわけで疑似チャットモードを組み込むぞ。
コンパスのスペルが「compass」だとさっき知りました。
とりあえず200Km四方のフィールドを作ったんだけど、さすがにどこを向いているのか位は知りたいのでコンパス(のよーなもの)を付けてみた。
コンパスの内側はレーダーにしようかなと思いつつ、なんにもオブジェクトがないので描くものなく、自分の方向のみ実装して終わり。なんだか味気ないなあ。
これでなんとなく自分がどこにいるのかわかるようになりました。ぼちぼちなんらかのオブジェクトを配置できるようにしよっと(木とかさ)。
フィールドに自分のキャラを立たせようと色々やってみたんだけど、なかなか思い通りの座標になってくれない。算数は苦手なんだよ、僕。
てなわけで、もう次のステップに進んじゃおう。どうせ自分のキャラクタ−って言ってもただの三角形のプリミティブだし。
でも次のステップちゅーてもどこに進もうかなと思ってたら、こーゆーサイトを見つけた。OpenGLの基礎の基礎から勉強できそうだ。日本語だし。
たかまる作成のモデリングをDXFフォーマットとLightWave 3Dのフォーマットでもらった。せっかくだから表示させようということで、ファイルフォーマットを調べてみた。
DXFフォーマットは前に書いたような気もするけど、割とベタなテキストで記述してある。ヘッダ部があって、データ記述部があって、フッタ部で閉める。データ記述部の中にはデータ宣言部と座標データが収められる。これの繰り返し。いまいちわかんないんだけど、DXFって単に座標を指示しているだけ?テクスチャーとか色情報はどうなるんだろう?
LWOオブジェクトフォーマットはLightWave 3Dのオブジェクトのファイルフォーマットなんですが、デベロッパーサイトにいろいろデータが公開されてるのでなんとか読み込めるようにはなるかな〜。Cで書かれたのサンプルコードまで置いてあるぞ。ふむ。
OpenGLを使ってフィールドを歩き回れるようになった。娘がなにやってんの?とPowerBookを覗いて一言。「誰かを探してるの?」。子供の目にもフィールドを歩いているように見えるのか。よっしゃ。
とりあえず野山を歩き回れるんだけど自分の姿も他のキャラクターの姿もないし、村もないし、木も一本も生えてません。ビューが移動するだけ。
ここまで来るといよいよキャラクターを動かしたくなるね。モデリングはたかまるにお願いしてるんだけど、昨日最初の作品を受け取った。DXFとLightwaveの実データをもらったんだけどとりあえずDXFの読み込みを調べよっと。
初期化とフルスクリーンモードを組み込んだスケルトンが出来たので色々OpenGLのテストをしてみようということでまずはテクスチャーを貼ってみた(いきなり?)。
とりあえず立方体を描いてみる。のっぺらーとした立方体が描かれた。
んでもってイメージを読み込む。Cocoaの場合、NSImageRepの
が便利ですな。JPEGだろうがBMPだろうがPNGだろうがイメージを読み込んでくれるのでらくちん。その昔JPEGを読み込む関数を自力で作ってたのが懐かしい。
テクスチャーもなんとなく貼れるようになったので次はいよいよフィールドを作ってみようかな〜。Mac OS X 10.0の頃、サンプルコードのディレクトリにGLUTのサンプルが豊富にあってその中に紙飛行機がふわふわ空を飛ぶサンプルがあったんだけど最近入ってないのね。地形の描画やアンジュレーション等の処理が参考になります。
Windowモードとフルスクリーンモードの切り替えを行うスケルトンアプリケーションを作成中。
その辺に転がっていたサンプルコードを頼りに色々いじってみたんだけど、あるサンプルコードを使うと、フルスクリーンモードに切り替えた瞬間にエラーになって先に進めない。別のサンプルコードを使うと、既に開いている他のアプリケーションのウィンドウが縮んでしまう。どちらもちょっと切ない。
前に紹介したNeHe Productionsのサンプルコードだと、エラーになるのでどれもフルスクリーンモードに切り替えが出来なかったんだけど、少しコードを追ってみたらもう一つのサンプルコードの問題である他のアプリのウィンドウが縮んでしまうことはないみたいなので、こっちを集中的にデバッグすることにした。結論から言うと、フルスクリーンモードに切り替えるときのアトリビュートのパラメータが少なかったため。
- (NSOpenGLPixelFormat *) createPixelFormat:(NSRect)frameにNSOpenGLPFAScreenMaskとメインのディスプレイのIDを追加してやれば動くぞ。なんだかものすごく局地的な話題だけど、気にしない。なんかの役に立つこともあるかもしれない。
とりあえず、作りかけのスケルトンアプリケーションはHDの肥やしになりました。
ベーシックな機能を実装してほげMMORPGの基礎にしようっと。
