2

私の目標は、頂点をその順序に従って色付けすることでした

編集: 長期的な目標: 重力の動作をシミュレートするための前後の頂点へのアクセス

私は次のコードを使用しました

#version 120
#extension GL_EXT_geometry_shader4 : enable
void main( void ) {
    for( int i = 0 ; i < gl_VerticesIn ; i++ ) {
        gl_FrontColor = vec4(float(i)/float(gl_VerticesIn),0.0,0.0,1.0);
        gl_Position = gl_PositionIn[i];
        EmitVertex();
    }
}

しかし、すべての頂点が黒く描かれています。常に 0 と評価されているようです。何かが足りないか、間違っていますか?

編集: メタ問題を解決しました: すべてのモデル ジオメトリを単一のジオメトリ シェーダー呼び出しにフィードする方法で、メインループがすべての三角形ではなく、すべての頂点を反復するようにします。

4

1 に答える 1

2

単一のジオメトリ シェーダー呼び出しですべての頂点を反復処理することはできません。すべての元のプリミティブ (ポイント、ライン、トライアングルなど) に対して呼び出されます。

解決策ははるかに簡単です。頂点シェーダー (実際には頂点ごとに呼び出されます)gl_VertexIDでは、頂点のインデックスを含む特別な変数 を読み取ることができます。そのインデックスは、頂点ごとにインクリメントされ ( を使用している場合)、描画呼び出しごとにリセットされる単なるカウンターglDrawArrays、またはインデックス配列からのインデックス ( を使用している場合glDrawElements) のいずれかです。

編集:長い目標について。直接ではありませんが、そのためにテクスチャ バッファを使用できます。これにより、基本的に、バッファオブジェクト(この場合は頂点バッファ)への直接線形配列アクセスを取得でき、この頂点インデックスでインデックスを付けることができます。しかし、それを達成する他の方法もあるかもしれません。それは別の質問で十分かもしれません.

于 2011-09-05T12:42:55.000 に答える