GLの基本的なプログラム
  • マウスで物体を回転させるAsaTrackball.h
視点位置によってマウスのドラッグ方向と物体の回転方向が変わるので注意

  • OBJファイルを読み込むOBJLoader.h

基本

https://bitbucket.org/asama-yaya/objloadertoglutno...
一番単純な読み込み(だと思う)
glslは使っていない。
頂点データ(m_vertices)とそれのインデックス(m_indices)を使って描画している。

頂点データの構造(OBJVERTEX)はあらかじめ決められた14パターンから選ぶ必要があるのが難点。
その理由もあり、頂点とかは全部float。

頂点をポインタではなくstd::vectorで表しているが処理速度に影響があるかは不明。

三角形の数×3だけの頂点データを保持していて、メモリがもったいないと感じるかもしれないが、
GPUでの処理を考えるとこっちのほうがいいらしい(検索におけるキャッシュのヒット率が高くなるので)
頂点バッファ使っていないので、転送すること考えるとこっちのほうが遅いかも

応用

https://bitbucket.org/asama-yaya/objloader_ding-di...
glsl(頂点バッファオブジェクト)を使ったバージョン。
ついでにインデックスバッファを使う。

glDrawElementの第4引数は、インデックスのスタート地点を示すところだけど、
インデックスバッファを使っているときは、NULL以外受け付けないようです。

しかたがないので、マテリアルの数だけインデックスバッファを作っている。

テクスチャについて

テクスチャはpngを使うことが多いので、OpenCVで読み込ませている。
テクスチャに関してはシェーダーの時よりややこしいことになるので嫌い。

プログラム内ではマテリアルごとに設定されたテクスチャを使うようになっている。
アルファブレンディングとかしたければ
glAlphaFunc(GL_GREATER, 0.5);
で比較方法を設定してから、
glEnable(GL_ALPHA_TEST);
を描画の前後に入れればよい。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます