3D

FTGLの日本語その2

toge氏の情報によると(http://d.hatena.ne.jp/toge/20050519) CharMapで指定するのは、FTGLに渡す文字列のコードではなく使用するフォントの文字コードだということらしい。 何故か漏れはFTGLが勝手に文字コード変換してくれるもんだと思い込んでいたぽい。…

FTGL続き

http://d.hatena.ne.jp/i-saint/20050515 WindowsでSJIS表示できるらしいとの情報。さっそく実験してみることに。FTGLのFTCharMap.hを読むと、SJISにも対応しているようなことが書かれている。 CharMapにエンコード方式を渡してやれば良いようだ。 ところが…

FTGLで日本語表示

http://d.hatena.ne.jp/m107/20050512/1115912015 FTGLで日本語が表示できないのでは?という情報が気になって寝るに寝られず実験。 ビルドするのにFreeTypeやらglutやらが必要で思いのほか手間取ってしまった。なんとかデモプログラムをビルドして日本語表…

衝突判定その3

衝突判定でちょっと困ったことに。 現在はhttp://d.hatena.ne.jp/halo_w2/20050401#p3 の構想で、すべてのオブジェクトの状態更新が終了した段階でまとめて衝突判定を行っている。オブジェクト状態更新の順番に依存しなくなるメリットがあるんだけど、いくつ…

描画の高速化3(VBOを使う)

toge氏の日誌(id:toge:20050420)を見て漏れ漏れもということで後回しにしていたARB_vertex_buffer_objectを試してみることに。 OpenGLではこういった拡張機能を使用する場合、使用できる拡張のリストを取得して目的の拡張が使えるのかどうかを調べ、必要な関…

可視判定

可視判定のための視錐台カリングを実装していたのだけれど案の定ハマりまくった。 何故か視野角によって出鱈目な結果になると思ったら、ラジアンを渡すとこにオイラー角を渡してたり、なんとか動くようになった物の、どうも判定漏れがあると思ったら、カメラ…

描画の高速化2

昨日の続き。頂点配列をOpenGLに渡すときにはglVertexPointer()、glNormalPointer()、などで頂点や法線のデータを個別の配列で渡してやる方法と、glInterleaveArrays()で指定のデータ構造の配列を渡してやる方法がある。 // 個別に配列を指定する場合 glVert…

描画の高速化

いくら最適化オフとはいえ、あんなに重くちゃかなわないので、ちょっくらコード最適化に乗り出してみることに。 ところでVC7.1ってプロファイラが無いんですね*1これを知ったときのorz加減といったら・・・というわけでググって見つけた日本コンピュウェアさ…

汎用的な衝突判定クラス その2

これ一つでいろんなゲームに使い回せるような汎用的な当たり判定クラスを作ろうという企て。タスクシステムとの関係も。 というわけで現時点での構想をチラシの裏的にまとめ。 衝突判定を管理クラスを作る。これ自体もタスクとして実行される( CCollisionMan…

加算α爆発

バトルシティもどきでは爆発の表現にGL_POINTを加算合成したパーティクルを用いていたのだけれど、流石にこれだと大量に爆発を出すと重くなるので、ビルボードとテクスチャアニメーションの爆発を作ってみた。爆発アニメーションの表現には発色弾というツー…

glScalefのバカヤローヽ(`Д´)ノ

メタセコモデルのローダーを改良中。なんだけれど妙な問題にぶつかった。どうしてもモデルのシェーディングがおかしい。異常にハイライトがきつかったり暗すぎたり。法線の計算ルーチンがバグっているのかと思い見直してみるも問題ない様子。材質やライティ…

汎用的な衝突検知クラス

OpenGLの今まで書き散らしたコードを、適当にnamespaceで囲いつつクラス化してみる。こういう作業は楽しいもんですな。なるべく汎用的に使えそうなクラス設計を心がける。とりあえず衝突検知をクラス化して汎用的に使いまわせるようにしようという企て。衝突…

描画順を管理する描画システムを妄想してみる。

以下完全にチラシの裏。 まず、ゲーム中で用いられる。地形やキャラクター、FPS表示、スコア表示などはすべてCGameObjectとかから派生させておいて、毎フレーム呼ばれるCGameObject::update()あたりから mGameFrame->queueDraw( 0x0001 ); // プライオリティ…

OpenGLで文字の描画その2

id:halo_w2:20050305の続き。I.Saint氏がgl_kanjiなる日本語表示プログラムを公開されている。 http://i-saint.abz.jp/pg/index.htmlBDFフォントを独自フォーマットに変換して使用しているらしい。独自の圧縮を施していて、フォントファイルのサイズは220KB…

OpenGLで透明なオブジェクトの描画

以下個人的メモ。 混合関数について glEnable(GL_BLEND);で混合機能を有効にする必要がある。しかしこれだけでは何の役にも立たないので、 glBlendFunc( src, dst );で混合元と混合先それぞれの混合関数を設定してやる必要がある。よく使うだろう混合関数の…

OpenGLで文字の描画

OSや環境に依存しない方法を考えるとなかなか厄介な問題。 1.ビットマップで描画する 最も一般的に使われてる手法?文字を並べた画像をあらかじめ作成しておき、その画像をテクスチャとしてそれぞれの文字に応じて振り分けて表示する。弱点はビットマップな…

3D空間での衝突判定その1

バウンディングボックス(AABB - Axis Aligned Bounding Box)を用いた領域判定。に関する個人的メモ。 class AABB { float min_x, min_y, min_z, max_x, max_y, max_z; };のようなデータ構造になる。バウンディングボックス同士の交差判定は bool cross_test(…

OpenGLのデプステスト(ハマり)

なぜかOpenGLのデプステストが有効にならない問題でハマり中。直方体を連続して配置してマップを描画するようなプログラムを書いてるんだけど、なぜかデプステストが有効にならない症状に悩まされる。きちんとDEPTH_TESTを有効にしてるし、glClear(DEPTH_BUF…

Metasequoiaのモデルデータを読み込む

国産有名3DモデラーMetasequoiaの独自ファイル形式MQOを読み込んでみることに。 中身は普通のテキストファイルだし、ファイルの構造も単純なのでサクッとできた。 ただ法線の計算がおかしいのか、いくつかのモデルで陰影表示が妙なことに。 Torus Trooper …

クォータニオンについての個人的メモ

クォータニオン? 「四元数」のこと。突っ込んだことは難しい数学の話になるらしいので気にしないことにする。3D空間内の軸と、その軸を中心とする回転を表すもの。クォータニオン同士は合成や補完ができる。 なにが便利? 回転の軸と回転角度クォータニオ…

OpenGLの投視変換

個人的メモ 平行投影 遠くのものも近くのものも同じ大きさで描かれる。3Dモデリングソフトの画面はこういうタイプ。gluOrtho(640,480,-1.0f, 100f);で設定する。 投視射影 近くのものは大きく、遠くのものは小さく描かれる。gluPerspective( 60.0, 640/480…