スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

モダンOpenGLでの1頂点複数要素対応について

OpenGLの解説サイトなどを見ていると、シェーダやトランスフォームなど、何から何まで自分で実装しなければならなくなってしまった、3.x以降のOpenGLのことを、「モダンなOpenGL」と呼称されていることが多いようです。

そのモダンOpenGLですが、glBegin/Endが廃止され、VBOベースでジオメトリデータを転送しなければならなくなってしまったわけですが、Colladaや、OBJファイルのデータ構造としては、1つの頂点に対して複数のUVや法線をセットできる仕組みになっており、対してVBOは1頂点には他の要素についても1対1で対応するのが前提、という仕様になってしまっています。

IT業界の方々は、訓練的なことは好きだが調査等の勉強は嫌い、という方が多いような印象があるのですが、私もそのような性質の人間で、長いことOpenGLを使ってはいるのですが、あまり必死になってAPIを網羅的に調査する、といったことをしたことがないので、実はVBOでもそのようなデータを扱えるのではないか、といろいろ調べてみたのですが、結果としてはやはり無理なようです。

こちらのサイトによると、

$ cat /var/log/shin : モダンなOpenGLでティーポットを描画したい

結論としては

・TBOを使えば一応出来なくもないが、パフォーマンス的にやめといた方が良い。
・基本的には展開(1頂点1要素になるように)した方が良い。

ということみたいです。

上記サイトでは、1頂点複数要素について

>さて、ここで疑問となるのが「なぜ属性ごとにインデックスを持っているのか」という点です。
>....

のような説明がなされているのですが、たとえば、

・とある物体がある
・その物体は理論上は連続する曲面になっており、それをCGで表示するためにメッシュ近似している
・ただし、柄(UV)は連続ではない

といったデータがあり、それを画面に表示して、且つ様々な解析処理の入力に使用したい、といった場合があります。

そのような場合には、頂点と面の連続性と、UVや法線の連続性が理論上一致しない場合があるのですが、
モダンOpenGLではそのような状況にシンプルに対応する手段というのはないということのようです。

残念ではありますが、1頂点に対して多数の要素を割り当てるというのは基本的にはメモリを大量に使用して、展開するというのが基本的な戦略になるということかと思います。
スポンサーサイト

コメントの投稿

非公開コメント

カレンダー
10 | 2017/11 | 12
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 - -
最新記事
カテゴリ
Qt (21)
SDL (2)
MFC (2)
検索フォーム
月別アーカイブ
最新コメント
最新トラックバック
RSSリンクの表示
リンク
リンク(管理用)
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。