1

シェーダー言語でvec2配列をvec4変数にバインドできますか?

たとえば、コードブローでは、変数「position」はvec4タイプであり、変数「squareVertices」をそれにバインドしようとしましたが、squareVerticesはvec2タイプの配列であり、(x、y)coodinatesのみ、おそらくデフォルト( x、y、z、w)=(x、y、0,1)?

私のVertexシェーダーと属性バインドコード:

attribute vec4 position;
attribute vec2 textureCoordinate;
varying vec2 coordinate;
void main()
{
    gl_Position = position;
    coordinate = textureCoordinate;
}

glBindAttribLocation(gProgram, ATTRIB_VERTEX, "position");
glBindAttribLocation(gProgram, ATTRIB_TEXTURE, "textureCoordinate");

// bind attribute values
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, squareVertices);
glEnableVertexAttribArray(ATTRIB_VERTEX);

glVertexAttribPointer(ATTRIB_TEXTURE, 2, GL_FLOAT, 0, 0, coordVertices);
glEnableVertexAttribArray(ATTRIB_TEXTURE);

// squareVertices definition
static const GLfloat squareVertices[] = {
    -1.0f, -1.0f,
    0.0f, -1.0f,
    -1.0f,  0.0f,
    0.0f,  0.0f,
};
4

1 に答える 1

1

はい、これは合法です。そして、zとwのデフォルト値がそれぞれ0と1であることは正しいです。これは、OpenGLES2.0仕様のセクション2.7で説明されています。

于 2013-03-08T02:18:59.377 に答える