GLSL 布局属性编号
GLSL layout attribute number
我正在尝试一个着色器示例来绘制一个三角形,其中 RGB 在顶点上进行插值,并假设使用
layout (location = 0)in vec4 vertex;
layout (location = 1) in vec4 VertexColor;
在顶点着色器中会起作用,因为数组中的 4 个浮点颜色紧跟在 4 个浮点顶点之后。但是,它总是绘制一个实心的红色三角形。所以我尝试了 location = 4 只是为了得到一个黑屏。进一步实验得到location = 2的蓝色三角形,最后得到location = 3的插值结果
我的问题是,我怎么会知道输入 3 作为位置?顶点数组如下所示:
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),所以一个有效的选项也是:
layout (location = 0)in vec4 vertex;
layout (location = 1) in vec4 VertexColor;
决定什么属性来自哪里的是一组 glVertexAttribPointer 调用。
这些是我对上述 glsl 声明的期望(假设您使用 VBO)
glVertexAttribPointer(0, 4, GL_FLOAT, false, sizeof(float)*4*2, 0);
glVertexAttribPointer(1, 4, GL_FLOAT, false, sizeof(float)*4*2, sizeof(float)*4);
我正在尝试一个着色器示例来绘制一个三角形,其中 RGB 在顶点上进行插值,并假设使用
layout (location = 0)in vec4 vertex;
layout (location = 1) in vec4 VertexColor;
在顶点着色器中会起作用,因为数组中的 4 个浮点颜色紧跟在 4 个浮点顶点之后。但是,它总是绘制一个实心的红色三角形。所以我尝试了 location = 4 只是为了得到一个黑屏。进一步实验得到location = 2的蓝色三角形,最后得到location = 3的插值结果
我的问题是,我怎么会知道输入 3 作为位置?顶点数组如下所示:
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),所以一个有效的选项也是:
layout (location = 0)in vec4 vertex;
layout (location = 1) in vec4 VertexColor;
决定什么属性来自哪里的是一组 glVertexAttribPointer 调用。
这些是我对上述 glsl 声明的期望(假设您使用 VBO)
glVertexAttribPointer(0, 4, GL_FLOAT, false, sizeof(float)*4*2, 0);
glVertexAttribPointer(1, 4, GL_FLOAT, false, sizeof(float)*4*2, sizeof(float)*4);