关于C#:GLSL布局属性编号

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);