0

そこで、glBegin(GL_QUADS)を使用してクワッドを作成し、頂点を描画しました。次に、クワッドにテクスチャを適用できるように、テクスチャ座標の配列をシェーダーに渡します。

そのため、構文を正しく理解するのに問題があります。

まず、値の2D配列を作成しました

GLfloat coords[4][2];
coords[0][0] = 0;
coords[0][1] = 0;
coords[1][0] = 1;
coords[1][1] = 0;
coords[2][0] = 1;
coords[2][1] = 1;
coords[3][0] = 0;
coords[3][1] = 1;

次に、属性vec2texcoordInがあるシェーダーに配置しようとしました。

GLint texcoord = glGetAttribLocation(shader->programID(), "texcoordIn");
glEnableVertexAttribArray(texcoord);
glVertexAttribPointer(texcoord, ???, GL_FLOAT, ???, ???, coords);

そのため、「???」でマークしたglVertexAttribPointerのパラメーターに何を入力する必要があるかについて混乱しています。また、最初に行ったように、テクスチャ座標を2D配列として表現することさえ許可されているのではないかと思います。

4

1 に答える 1

0

適切な値は次のようになります

glVertexAttribPointer(
 texcoord,
 2, /* two components per element */
 GL_FLOAT,
 GL_FALSE, /* don't normalize, has no effect for floats */
 0, /* distance between elements in sizeof(char), or 0 if tightly packed */
 coords);

また、最初に行ったように、テクスチャ座標を2D配列として表現することさえ許可されているのではないかと思います。

上記とまったく同じ方法で、つまり静的に割り当てられた配列を使用して記述した場合、そうです。C標準では、要素がメモリに密にパックされると主張されているためです。ただし、ポインターへのポインターの動的に割り当てられた配列を使用する場合は、いいえ。

于 2013-02-08T14:25:09.640 に答える