web-dev-qa-db-fra.com

OpenGL: qualificatif de disposition?

J'ai donc appris quelques OpenGL, c'est beaucoup à prendre et je suis juste un débutant, mais je ne comprends pas le "Layout Qualifier" dans GLSL.

Donc quelque chose comme ça:

layout (location = 0) in vec3 position;

dans un simple vertex shader comme celui-ci:

#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
}

Je comprends la sortie vec4 par exemple (puisque c'est le fragment shader). Et le vertexColor a du sens par exemple.

Mais peut-être que je ne comprends pas la "position" et qu'est-ce que cela signifie exactement dans ce sens? Quelqu'un veut-il expliquer? Honnêtement, le wiki opengl ne m'a pas aidé.

Mais peut-être que je ne comprends pas ce qu'est un vertex shader (je suis bien sûr encore un peu incertain du pipeline). mais d'après ma compréhension, la spécification du sommet est la première chose que nous faisons correctement? (Vertices/Indices si nécessaire) et les stocker dans un VAO.

Donc, le vertex shader interagit avec chaque point de sommet individuel? (j'espère) parce que c'est comme ça que je l'ai compris?

18
msmith1114

Vous avez raison, le vertex shader est exécuté pour chaque sommet.

Un sommet est composé de ou de plusieurs attributs (positions, normales, coordonnées de texture, etc.).

Du côté CPU lorsque vous créez votre VAO, vous décrivez chaque attribut en disant "ces données dans ce tampon seront l'attribut 0, les données à côté seront l'attribut 1 etc.". Notez que le VAO ne stocke que ces informations sur qui est qui. Les données de sommet réelles sont stockées dans des VBO.

Dans le vertex shader, la ligne avec la disposition et la position dit simplement "obtenez l'attribut 0 et mettez-le dans une variable appelée position" (le emplacement représente le numéro de l'attribut).

Si les deux étapes sont effectuées correctement, vous devriez vous retrouver avec une position dans la variable nommée position :) Est-ce plus clair?

19
Jerem