私はwavefrontオブジェクトパーサーを完成させています。これを使ってジェネリックメッシュオブジェクトを構築したいと思います。私のエンジンはOpenGL 4とシェーダを使ってエンジンのすべてを描画します。一連のサブグループとしてOpenGLのメッシュをレンダリングする?
私の質問は、メッシュをレンダリングする際のレンダリングの効率を最大限に高める方法についてです。
wavefront .obj fileには、通常、多くのオブジェクトサブグループが指定されています。
サブグループには特定の素材(例:光沢のある赤色)が割り当てられている場合があります。
したがって、メッシュはそれぞれ独自のマテリアルが割り当てられたかなり複雑なサブグループの集合である可能性があります。
私の質問がある -
Q.私は別に、例えば、各サブグループを描画する必要がありますか各サブグループに対してglDrawElementsが呼び出されますか? (私は4つの別々のサブグループを持っていたのであれば、私はそれによって材料/テクスチャの4つの均一の変更()で4回シェーダを呼び出し、4 glDrawElements呼び出しを行う必要があるだろう)
glDrawElements(GL_TRIANGLES, nNumIndicesInGroup, GL_UNSIGNED_INT, ((char*)NULL)+ first-vertex-offset);
これが正しい場合、私は計算する必要があります:サブグループの開始オフセット(各サブグループのための別個のインデックスアレイ及びVAO暗示)各サブグループにおける
インデックス頂点を
これは非常に効率が悪いようですが、私は間違った木を吠えますか? Wavefront obj wiki pageからも
、:
Smooth shading across polygons is enabled by smoothing groups.
s 1
...
# Smooth shading can be disabled as well.
s off
...
誰でもスムーズシェーディング値を示すものを提案することはできますか?例えば。 s1、s2、s4など
この質問は、前述のように、頂点データが何であるか、またそれを使って何をやっているのかを知らなくても答えられません。材料、シェイダーなどの質問はすべて衝撃性能です。 –