web-dev-qa-db-fra.com

À quoi ressemblent les shaders GLSL par défaut? pour la version 330

À quoi ressemblent les shaders GLSL de vertex, de fragment et de géométrie par défaut pour la version # 330?

Je vais utiliser #version 330 GLSL Version 3.30 NVIDIA via le compilateur Cg, car c'est ce que ma carte graphique prend en charge.

Avec les shaders par défaut, je veux dire les shaders qui font exactement la même chose que la carte graphique ferait lorsque le programme de shaders est désactivé.

Je ne trouve pas un bon exemple pour #version 330. Je suis allé sur Google toute la journée. Je ne sais pas si le terme shader par défaut est appelé quelque chose d'autre comme trivial ou basique et si c'est pourquoi je ne le trouve pas.

Toutes les recommandations pour un livre avec la version 330 ou un lien vers un didacticiel pour débutant facile avec la version 330 seraient également utiles.

exemple d'un vertex shader trivial dans #version 110, effectue la transformation par défaut du vertex

#version 110

void main()
{
    gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}

exemple d'un fragment shader trivial dans #version 110, transforme la couleur en rouge

#version 110

void main()
{
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
25
ColacX

Il n'y a pas de shaders "par défaut" avec OpenGL. Cela ressemble à ce que vous voulez un exemple très simple d'un shader qui transforme les sommets en espace de clip et leur donne une couleur, alors voici:

Vertex shader:

#version 330

layout(location = 0)in vec4 vert;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

void main()
{
    gl_Position = projection * view * model * vert;
}

Shader de fragment:

#version 330

out vec4 fragColor;

void main()
{
    fragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

Le profil principal d'OpenGL 3.3 supprime la prise en charge de nombreuses anciennes fonctions fixes comme la pile matricielle. Vous devez gérer vos propres matrices et les envoyer à vos shaders. Il n'y a pas de ftransform, et gl_Position est à peu près la seule variable gl_ * valide.

Bien que glBindAttribLocation ne soit pas obsolète, la méthode préférée pour définir l'emplacement des attributs de sommet est par le biais de "layout (location = x)" dans GLSL.

Dans le vertex shader, "attribut" est maintenant "in" et "variant" est maintenant "out". Dans le fragment shader, "variant" est désormais "in" et "gl_FragColor" est défini par une variable "out". Je crois que gl_FragColor est toujours valide, mais maintenant il est possible d'utiliser une variable out pour définir la couleur.

Ce tutoriel est très bon et enseigne le noyau OpenGL et GLSL 3.30, je vous recommande de l'utiliser pour vous aider à en savoir plus sur GLSL. Souvenez-vous également que GLSL Reference Pages est votre ami.

36
Robert Rouhani