投稿者 tel | 2010年8月30日

OpenGLでメタセコのモデル表示

OpenGLでメタセコのモデルを読み込んだときにはまったのでメモ。

OpenGLの頂点バッファオブジェクトを使ってモデルを表示しようとした場合、頂点座標、法線、テクスチャ座標の数は一致していなければならない。しかしモデルによってはテクスチャ座標の数が頂点座標よりも多い場合がある。こういったケースでは頂点を増やさないと描画できない。つまり頂点座標は同じでもテクスチャ座標、法線が違う頂点は別のものとして扱う必要がある。一番簡単なのは面の数だけ頂点を増やしてしまう方法(三角形のみなら面の数の3倍の頂点)。ただしこれだと完全に重複する頂点が出てきてしまう可能性があるのでglDrawElementsで描画するメリットがなくなる。

とりあえず一番簡単な方法を試す。メタセコイヤのデータだと面情報にテクスチャ座標が格納されている。

  1. すべての面に対して頂点を生成。面の持つ頂点インデックスから頂点を参照する。
  2. テクスチャ座標は面から参照する。
  3. 面の持つ頂点インデックスを生成した頂点のインデックスにする。

とりあえず表示はできるようになった。モデルは某掲示板で拾ったものを使わせていただきました。このままだと無駄な頂点があるのでなんとか重複している頂点を削る方法を考えよう。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。