OpenGL:布局限定符?

msm*_*114 15 opengl glsl

所以我一直在学习一些OpenGL,这需要很多东西,我只是一个初学者,但我不理解GLSL中的"布局限定符".

所以像这样:

layout (location = 0) in vec3 position;
Run Code Online (Sandbox Code Playgroud)

在一个简单的顶点着色器,如下所示:

#version 330 core
layout (location = 0) in vec3 position; // The position variable has attribute position 0

out vec4 vertexColor; // Specify a color output to the fragment shader

void main()
{
    gl_Position = vec4(position, 1.0); // See how we directly give a vec3 to vec4's constructor
    vertexColor = vec4(0.5f, 0.0f, 0.0f, 1.0f); // Set the output variable to a dark-red color
}
Run Code Online (Sandbox Code Playgroud)

我理解out vec4(因为那会进入片段着色器).例如,vertexColor是有意义的.

但也许我不理解"位置",这究竟意味着什么呢?有人关心解释吗?opengl wiki老实说没帮我.

但也许我误解了什么是顶点着色器(我当然还是对管道有点不确定).但根据我的理解,顶点规范是我们做的第一件事吗?(如果需要,可以使用顶点/指数)并将它们存储到VAO中.

那么顶点着色器是否与每个顶点相互作用?(我希望)因为那是我如何理解的?

Jer*_*rem 18

你是对的,为每个顶点执行顶点着色器.

顶点由或几个属性(位置,法线,纹理坐标等)组成.

在创建VAO时,在CPU端,通过说"此缓冲区中的此数据将属性为0,其旁边的数据将为属性1等"来描述每个属性.请注意,VAO仅存储此信息的人员.实际的顶点数据存储在VBO中.

在顶点着色器中,具有布局和位置的线只是说"获取属性0并将其放入名为position的变量"(该位置表示属性的编号).

如果两个步骤都正确完成,你应该在名为position的变量中找到一个位置:)它更清楚吗?

  • 那么你为什么要使用除零之外的任何东西? (3认同)
  • 好吧,如果您有位置和法线,例如,您可以在属性1中定位属性0和法线1.您不能将两者放在属性0中. (2认同)