ウェーブフロント オブジェクト パーサーを完成させており、それを使用して汎用メッシュ オブジェクトを構築したいと考えています。私のエンジンは OpenGL 4 とシェーダーを使用してエンジン内のすべてを描画します。
私の質問は、メッシュをレンダリングするための最高のレンダリング効率を確保する方法についてです。
通常、 wavefront .obj ファイルには、多くのオブジェクト サブグループが指定されています。
サブグループには、特定のマテリアル (光沢のある赤色など) が割り当てられている場合があります。
したがって、メッシュはサブグループのかなり複雑なコレクションであり、それぞれに独自のマテリアルが割り当てられています。
私の質問は -
Q. サブグループごとに glDrawElements を呼び出すなどして、各サブグループを個別に描画する必要がありますか? (したがって、4 つの個別のサブグループがある場合、4 つの glDrawElements 呼び出しを行う必要があるため、4 つの均一な変更 (マテリアル/テクスチャ用) でシェーダーを 4 回呼び出す必要があります)。
glDrawElements( GL_TRIANGLES, nNumIndicesInGroup, GL_UNSIGNED_INT, ((char*)NULL)+ first-vertex-offset );
これが正しければ、次のように計算する必要があります。
各サブグループのインデックス (サブグループごとに個別のインデックス配列と VAO を意味する) サブグループの開始点の頂点オフセット
これは非常に効率が悪いように思えます。間違ったツリーを鳴らしているのでしょうか?
また、Wavefront obj wiki ページから:
Smooth shading across polygons is enabled by smoothing groups.
s 1
...
# Smooth shading can be disabled as well.
s off
...
滑らかなシェーディング値が何を示しているかを誰かが提案できますか? 例: s1、s2、s4 など。