OpenGLの最近のブログ記事

だいぶ間が空いちゃったけど、作りかけの3Dのフィールドを人形が歩くサンプルの続きをと思ってコードを見てたんだけど、我ながらさっぱりなので、モデリングに逃避する事にした。モデラーは六角大王のフリー版だ。必要最低限だけど使える。とりあえずスキンヘッドを描いてみた(娘のリカちゃん人形をサンプリング)。

で、適当なボディに乗せて以前作りかけのフィールドに置いてみたところ、以前悩んでいたポリゴンがひっくり返る現象が解消されていた。以前使っていたデータは恐らくWindows版のデータをMacでDXFにコンバートしたもの。んー、プラットフォーム間でなんかデータの際が発生するの?いやーん。

まあいいや。今後ぼちぼちとOpenGL関係を移植層に追いやった上で、ポリゴン君が歩き回れる環境を作っていこう。

秋休み最終日なんですけど...

ちと調べ始めてみました。まずは「OpenGL 人体モデル」でぐぐる。

その中からピックアップしたのがこちら。
Kaneko's Software Page
バイナリはWindows版だけど、OpenGLだからね、サンプルコードは参考になりますです。んで、ここから更にリンクして飛んだ先がこちら。
CypherS TufT
六角大王のフリーデータが大量に公開されています。ちょっと気を抜くと萌え系の3D女の子が満載なページだったりしてびびりますが、六角大王ってすごいね。
六角大王からDXFは六角大王でできるので、コンバートしてみた。ビューワーが欲しいねってことでSMViewer 0.2.5。ソースコードもついてるよ。パスが崩れてるのでそのままじゃビルドできないのでちょちょっといじると、じゃーん。悪魔ちっくなおねえちゃん登場。

ちょっとご無沙汰のほげMMORPG。いろいろなサンプルを見ていたら、割と簡単にテキストを表示する方法があったので組み込んでみた。

OpenGLを使ってテキストを描画するのは結構面倒な作業になる。というのも、OpenGLには特にテキストを表示する仕組みが用意されていないので、自力でテキストをテクスチャーとして貼付けなくてはならないのだね。ちょっと検索すると文字を敷き詰めたテクスチャーを用意して、マトリクスで読み取る方法がちょくちょく紹介されている。文字コード表みたいなもんね。それって面倒だなあって思いつつAppleのサンプルコードを見てたら、Viewに文字列を描いてからビットマップとして取り出してテクスチャーとして使っていた。なるほどね。こりゃ便利ということで実装してみました。ひょっとして日本語だってオッケ!?と思ったんですが、どうもうまくいきません。

まあいいや。というわけで疑似チャットモードを組み込むぞ。

初期化とフルスクリーンモードを組み込んだスケルトンが出来たので色々OpenGLのテストをしてみようということでまずはテクスチャーを貼ってみた(いきなり?)。

とりあえず立方体を描いてみる。のっぺらーとした立方体が描かれた。
んでもってイメージを読み込む。Cocoaの場合、NSImageRep

+ (id)imageRepWithContentsOfFile:(NSString *)filename;

が便利ですな。JPEGだろうがBMPだろうがPNGだろうがイメージを読み込んでくれるのでらくちん。その昔JPEGを読み込む関数を自力で作ってたのが懐かしい。

テクスチャーもなんとなく貼れるようになったので次はいよいよフィールドを作ってみようかな〜。Mac OS X 10.0の頃、サンプルコードのディレクトリにGLUTのサンプルが豊富にあってその中に紙飛行機がふわふわ空を飛ぶサンプルがあったんだけど最近入ってないのね。地形の描画やアンジュレーション等の処理が参考になります。

Windowモードとフルスクリーンモードの切り替えを行うスケルトンアプリケーションを作成中。

その辺に転がっていたサンプルコードを頼りに色々いじってみたんだけど、あるサンプルコードを使うと、フルスクリーンモードに切り替えた瞬間にエラーになって先に進めない。別のサンプルコードを使うと、既に開いている他のアプリケーションのウィンドウが縮んでしまう。どちらもちょっと切ない。

前に紹介したNeHe Productionsのサンプルコードだと、エラーになるのでどれもフルスクリーンモードに切り替えが出来なかったんだけど、少しコードを追ってみたらもう一つのサンプルコードの問題である他のアプリのウィンドウが縮んでしまうことはないみたいなので、こっちを集中的にデバッグすることにした。結論から言うと、フルスクリーンモードに切り替えるときのアトリビュートのパラメータが少なかったため。
- (NSOpenGLPixelFormat *) createPixelFormat:(NSRect)frameNSOpenGLPFAScreenMaskとメインのディスプレイのIDを追加してやれば動くぞ。なんだかものすごく局地的な話題だけど、気にしない。なんかの役に立つこともあるかもしれない。

とりあえず、作りかけのスケルトンアプリケーションはHDの肥やしになりました。
ベーシックな機能を実装してほげMMORPGの基礎にしようっと。

ちょっと忘れんように書いとくわ。

DXFフォーマットについてちょっと調べてたんだけどその構造に関するぺえじ。
http://www.tanaka.is.uec.ac.jp/~ishigaki/dxfcg0J.html

DXFフォーマットをOpenGLへのコンバートに関するぺえじ。ソースコードあり。
http://www.bearcave.com/dxf/dxfintro.htm

MyMiniCity

アーカイブ