ユーザーが以前に選択したいくつかのオプションに応じて、100から2500の三角形の面を持つ中規模から大規模のオブジェクトを描画しています。オブジェクト自体は固定されています。移動せず、変換も行われず、何も行われません。これまでのところ、「私のアプリがOBJファイルをロードし、ユーザーがそれらを見る」と考えることができますが、それは間違いではありません。
トリッキーな点は、いつでもオブジェクトの一部の面が「選択」され、一部は選択されないことです。選択した面は、異なるテクスチャで表示する必要があります。同じUV座標ですが、ピクセルの色は異なるビットマップから取得されます。いつでも顔の約半分が選択され、どの顔が継続的に変更されます。
したがって、フラグメントシェーダー内で、選択した面で作業している場合は、このビットマップでtexture2D()を呼び出し、選択されていない三角形を使用している場合は、それを使用します。ただ、フラグメントシェーダーから自分がどの三角形に入っているかを見つける方法がわかりません。私の質問はどれですか:私はこれを知ることができますか?
私には別の方法があります-頂点の独自のコピーですべての面を設定し、テクスチャビットマップのサイズを2倍にし、「選択された」または「選択解除された」部分を指すように面ごとの頂点にUV座標を設定しますビットマップの数ですが、頂点の数は6倍になり、フレームごとにまったく新しいUV配列をGPUに渡します。小さいオブジェクトでも、著しく遅くなります。良くない。