7

私はiPhone用のOpenGLアプリケーションを開発しています。頂点シェーダーでは、多数の(すべてではない)頂点の色を一度に変更する方法が必要なので、カラーインデックスを作成しました。これにより、VBOを静的のままにして、各頂点をループして各フレーム間の色情報を変更するのではなく、単一の一様変数を変更できるようになります。

私の計画は、カラー配列を使用してユニフォームを作成し、属性にインデックスを含む整数を追加することです。これが私の頂点シェーダーです:

uniform mat4 u_mvp_matrix;
uniform vec4 u_color_array[];

attribute vec4 a_position;
attribute int a_colorIndex;

varying lowp vec4 v_color;

void main()
{
    v_color = u_color_array[a_colorIndex];

    gl_Position = u_mvp_matrix * a_position;
}

これによりエラーが発生します。

intを頂点シェーダーに含めることはできません

私はいくつかの調査をしました。iPhoneは最新のOpenGLES2.0をサポートしています。つまり、最新のGLSL 1.2をサポートしており、整数はGLSL1.3以降でのみサポートされているようです。a_colorIndexをfloatに変更してみました。私はそれが機能することを期待していなかったし、そうでもなかった。

各頂点のカラーインデックスを指定するにはどうすればよいですか?

4

1 に答える 1

3

属性をfloatとして指定します。配列へのインデックスとしてfloatを使用できます。

于 2012-07-08T02:47:23.933 に答える