2

Direct3D を使用して、鉄骨構造で使用される多数の I 断面を表示しています。シーン全体に、これらの I セクションのインスタンスが何百もある可能性があります。

私はこれを2つの方法で行うことができます:

Iセクション

方法 A を使用すると、サーフェスが少なくなります。ただし、背面カリングをオンにすると、サーフェスは片側からしか見えなくなります。背面カリングがオフになっている場合、フランジ (水平プレート) とウェブ (垂直プレート) が間違った順序でレンダリングされる可能性があります。

方法 B は正しいように見えます (背面カリングをオンにしておくこともできます) が、私のモデルでは I セクションのプレートの厚さは重要ではなく、各サイドに個別の三角形ストリップを作成する必要は避けたいと考えています。プレート。

より良い解決策はありますか?DrawIndexedPrimitives の特定の呼び出しに対してのみ背面カリングをオフにする方法はありますか? プラットフォームに中立な回答があれば、それもお願いします。

4

4 に答える 4

1

あなたがBを見ている距離は、それらすべての縮退した三角形を描くための処理能力の浪費になるので、私はAを使います。

また、単純に z バッファーでそれらを起動し、それですべてを整理できるようにします。

遅すぎる場合は、最適化を検討し始めますが、消費者向けのグラフィックス カードでさえ、毎秒数百万のポリゴンを描画できます。

于 2008-10-27T13:35:39.867 に答える
1

OpenGL では、描画する三角形ごとに背面カリングを切り替えることができます。

glEnable(GL_CULL_FACE);
glCullFace(GL_FRONT);
// or
glCullFace(GL_BACK);

Direct3Dでも同様のことが可能だと思います

于 2008-10-27T09:13:36.947 に答える
1

まず、背面カリングは、オブジェクトがレンダリングされる順序とは何の関係もありません。それ以外は、見栄えが良くなるということ以外に特に理由はなく、アプローチ B を使用します。また、このオブジェクトはおそらく手のひらいっぱいの三角形にすぎません。シーンに何百もあることは問題になりません。そうである場合は、ハードウェアのインスタンス化を調べてみてください。

于 2008-10-27T09:13:50.863 に答える
1

I セクションがそれほど頻繁に変更されない場合は、すべてのセクションを 1 つの大きな頂点/インデックス バッファーにロードし、1 回の呼び出しでそれらを描画します。これは物を描画する最も効率的な方法であり、50 万個の三角形をプッシュしても、グラフィック カードは高速に動作します。

はい、これにはすべてのセクションの頂点データを複製する必要がありますが、それが D3D9 の使用方法です。

于 2008-10-27T09:32:33.647 に答える