6

テクスチャのないモデル アセットがあり、それらを照明なしで黒くレンダリングするのにうんざりしています。これは、テクスチャ ID 0 がバインドされていて、サンプラーに尋ねると、それが黒だと教えてくれるからです。後で 0 * 照明につながり、照明なしでオブジェクト全体が黒くなります。理想的には、色、マテリアル、およびライトが必要です (これは、0 を掛けないと発生します)。

uniformフラグを使用してオブジェクトごとに切り替えることを検討しましたが、後で部分的にテクスチャを適用したアセットが必要になった場合に備えて、よりシンプルでパフォーマンスの高い方法を望んでいました。

たとえば、白いピクセルを押して白いテクスチャをバインドしてラップするように設定することもありましたが、これは「Chi Ting」のようです。

ノート。有効なテクスチャは黒を返す場合があるため、黒のテクスチャの読み取りを無視することはできません。できますが、見栄えがよくありません。現在、バッファ オブジェクトは使用しておらずglBegin() glEnd()、表示リストを使用する非推奨のメソッドのみを使用しています。

他のアイデアをいただければ幸いです。

4

2 に答える 2

7

空の白いテクスチャを使用します。uniform を使用するのと同じくらい高速になり、余分なケースを処理する必要がなくなります。

速度が本当に気になる場合は、テクスチャを 1 つに結合し、テクスチャのない部分のために小さな白い領域を残します。texCoords の変更は、テクスチャやユニフォームの変更よりもはるかに高速です。

于 2011-05-30T10:31:40.803 に答える
3

あなたが提案したように、openGLを学習する私自身の試みでは、ブール値のユニフォームを使用しました。

テクスチャを使用したり、色を固定したりすることは、各モデル オブジェクトのプロパティであることは理にかなっています。したがって、ユニフォームを介して各オブジェクトのシェーダーにこのプロパティを設定することは論理的であり、「不正行為」は関係ありません!

気分が良くなる場合は、テクスチャ プロパティとテクスチャ付き/テクスチャなしフラグを使用して情報を複製する代わりに、テクスチャ (存在する場合) をオブジェクトのプロパティとして保持し、その有無に基づいてユニフォームを設定できます。 .

于 2011-05-30T10:13:44.683 に答える