0

OpenGL + GLSL シェーダーでテクスチャにレンダリングしようとしています。まず、30x30 テクスチャのすべてのピクセルを白色で塗りつぶそうとしています。テクスチャの各ピクセルを表す 0 から 899 までの頂点シェーダー インデックスに渡します。これは正しいです?頂点シェーダー:

flat in int index;

void main(void) {
gl_Position = vec4((index % 30) / 15 - 1, floor(index / 30) / 15 - 1, 0, 1); 
}

フラグメント シェーダー:

out vec4 color;


void main(void) {
color = vec4(1, 1, 1, 1);
}
4

1 に答える 1

1

ピクセルあたり 1 つの頂点で、900 個の頂点をレンダリングしようとしていますか? どうしてそんなことをするのか?使用しているプリミティブ型。ポイントを使用している場合にのみ意味がありますが、実際にフラグメントの中心に到達するには、出力座標をわずかに変更する必要があります。

このための通常の方法は、フレーム バッファ全体を満たすクワッド (頂点が 4 つだけの三角形のストリップとして簡単に表される) だけをレンダリングすることです。これを実現するには、ビューポートをフル フレームバッファに設定し、(-1,-1) から (1,1) までクワッドでレンダリングするだけです。

どちらのアプローチでも、頂点属性は必要ないことに注意してください。gl_VertexID(アプローチの代わりに直接index、またはクワッドの4つの頂点座標のconst配列へのインデックスとして)使用できます。

于 2013-09-28T22:40:59.943 に答える