質問

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

これには2つの方法があります:

I-Sections

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

方法Bは正しいようです(バックフェースカリングをオンにしておくこともできます)が、私のモデルでは、Iセクションのプレートの厚さは重要ではないため、それぞれに個別の三角形ストリップを作成する必要はありません。プレートの側面。

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

役に立ちましたか?

解決

まず、バックフェースカリングは、オブジェクトがレンダリングされる順序とは関係ありません。それ以外は、おそらくより良く見えるということ以外の特定の理由でアプローチBに行きます。また、このオブジェクトはおそらく三角形でいっぱいの手以上のものではありません。シーンに数百人いることは問題になりません。そうであれば、ハードウェアのインスタンス化を調べてみてください。

他のヒント

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

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

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

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

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

Bから見える距離は、すべてのこれらの縮退三角形を描画するための処理能力の無駄になるため、Aを使用します。

また、単にz-bufferでそれらを起動し、それですべてをソートできるようにします。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top