【问题标题】:Could I bind a vec2 array to a vec4 variable in shader language?我可以将 vec2 数组绑定到着色器语言中的 vec4 变量吗?
【发布时间】:2013-03-08 01:22:31
【问题描述】:

我可以将 vec2 数组绑定到着色器语言中的 vec4 变量吗?

例如,在代码中,变量“position”是一个vec4类型,我尝试将变量“squareVertices”绑定到它,但是squareVertices是一个vec2类型的数组,只有(x,y)坐标,也许默认 (x,y,z,w) = (x,y,0,1)?

我的顶点着色器和属性绑定代码:

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,
};

【问题讨论】:

    标签: opengl-es shader


    【解决方案1】:

    是的,这是合法的。而且,z 和 w 的默认值分别是 0 和 1 是正确的。 OpenGL ES 2.0 规范的第 2.7 节对此进行了介绍。

    【讨论】:

    • 六年后,这才解决了我的疑问:OpenGL ES 2 for Android: A Quick-Start Guide 中的第一个示例如何只有 x 和 @987654322 @ 坐标,而在顶点着色器中 a_Position 是一个 vec4。用新代码对其进行了测试,并且工作正常...少了一个 OpenGL 谜团,谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-10-04
    • 2016-11-19
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多