GLSL layout attribute number
我正在尝试一个着色器示例,以绘制一个在顶点之间插有RGB的三角形,并假定使用
1 2 | layout (location = 0)in vec4 vertex; layout (location = 1) in vec4 VertexColor; |
在顶点着色器中将起作用,因为4个浮动颜色立即跟随数组中的4个浮动顶点。 但是,它始终绘制一个实心的红色三角形。 因此,我尝试将location = 4设为黑屏。 实验进一步给出了位置= 2的蓝色三角形,最后得到了位置= 3的插值结果。
我的问题是,我怎么应该知道输入3作为位置? 顶点数组如下所示:
1 2 3 4 5 6 | GLfloat vertices[] = { -1.5,-1.5, 0.0, 1.0, //first 3D vertex 1.0, 0.0, 0.0, 1.0, //first color 0.0, 1.5, 0.0, 1.0, //second vertex 0.0, 1.0, 0.0, 1.0, //second color 1.5,-1.5, 0.0, 1.0, //third vertex 0.0, 0.0, 1.0, 1.0,}; //third color |
注意:在第一个代码块中,从layout = 3编辑了原始layout = 1
每个位置可以容纳4个浮点数(单个vec4),因此有效的选择还应该是:
1 2 | layout (location = 0)in vec4 vertex; layout (location = 1) in vec4 VertexColor; |
决定属性从何而来的是glVertexAttribPointer调用集。
这些是我希望在上面的glsl声明中使用的(假设您使用的是VBO)
1 2 | glVertexAttribPointer(0, 4, GL_FLOAT, false, sizeof(float)*4*2, 0); glVertexAttribPointer(1, 4, GL_FLOAT, false, sizeof(float)*4*2, sizeof(float)*4); |