GPUカードにOpenGL 4.2が搭載されている場合は、GLSLでimageStore()
という関数を使用して、画像内の三角形IDをマークすることができます。私の場合は、画面上の定義済みのウィンドウの背後にあるすべての三角形を検出する必要があります。ピッキング(ウィンドウ上でレンダリングされた三角形を選択)は同様に機能します。選択は私のためにリアルタイムで実行されます。
イメージ(またはテクスチャ)の最大サイズは、8192x8192 = 64M以上である必要があります.64Mまでのプリミティブ(最大で2枚、3枚のイメージを使用する場合)を使用できます。スクリーンの後ろ
保存するすべてのtrianges Idは、このフラグメントシェーダで行うことができます。
uniform uimage2D id_image;
void main()
{
color_f = vec4(0)
ivec2 p;
p.x = gl_PrimitiveID % 2048;
p.y = gl_PrimitiveID/2048;
imageStore(id_image, p, uvec4(255));
}
Idは画面に描画すべてtrianges保存するには:その後、わずかに異なるフラグメントを使用して、まず、我々は深度バッファを事前に計算しますシェーダ:
uniform uimage2D id_image;
**layout(early_fragment_tests) in;** //the shader does not run for fragment > depth
void main()
{
color_f = vec4(0)
ivec2 p;
p.x = gl_PrimitiveID % 2048;
p.y = gl_PrimitiveID/2048;
imageStore(id_image, p, uvec4(255));
}
おそらく適切な境界線ボリューム階層を使用したレイピッキング? – Bart
名前/色は本当に遅いです...私はどんな目的でもお勧めしません。バートが言ったことをしてください。 – Rookie