2011-12-26 15 views
20

¿Para qué se parecen los sombreadores GLSL de vértices, fragmentos y geometría para la versión # 330?¿Cómo se ven los sombreadores GLSL predeterminados? para la versión 330

Voy a utilizar #version 330 GLSL Versión 3.30 NVIDIA a través del compilador Cg, porque eso es lo que admite mi tarjeta gráfica.

Con sombreadores predeterminados, me refiero a sombreadores que hacen exactamente lo mismo que haría la tarjeta gráfica cuando el programa de sombreado está desactivado.

No puedo encontrar un buen ejemplo para #version 330. He estado buscando en Google todo el día. No estoy seguro si el término predeterminado shader se llama algo más trivial o básico y si es por eso que no puedo encontrarlo.

Cualquier recomendación para un libro con la versión 330 o un enlace a un tutorial fácil para principiantes con la versión 330 sería genial también.

ejemplo de un shader de vértice trivial en #version 110, realiza la transformación vértice predeterminado

#version 110 

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

ejemplo de un shader fragmento trivial en #version 110, se vuelve de color rojo en

#version 110 

void main() 
{ 
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); 
} 
+0

En el sentido más técnico, no se puede desactivar el sombreado en el núcleo GL 3.3, ya que la capacidad de representar sin sombreadores se eliminó en [contextos OpenGL básicos] (http://www.opengl.org/wiki/Core_And_Compatibility_in_Contexts) . OpenGL Wiki mantiene una [lista de tutoriales basados ​​en sombreadores] (http://www.opengl.org/wiki/Getting_started#Tutorials_and_How_To_Guides) (uno de los cuales es mío), pero ninguno de ellos tiene sombreadores que se asignan directamente a lo que se ha solucionado -funcionalidad haría. Esa es probablemente la * peor * forma de aprender la programación basada en sombreadores de todos modos. –

Respuesta

31

Hay no hay sombreadores "predeterminados" con OpenGL. Parece que lo que quiere un ejemplo muy simple de un shader que transforma vértices para recortar el espacio y les da un color, así que aquí va:

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

Fragmento de sombreado:

#version 330 

out vec4 fragColor; 

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

El perfil OpenGL 3.3 de núcleo deja de ser compatible con una gran cantidad de elementos antiguos de funciones fijas como la pila de matriz. Se espera que manejes tus propias matrices y las envíes a tus sombreadores. No hay formatrans, y gl_Position es prácticamente la única variable gl_ * válida.

Mientras glBindAttribLocation no está en desuso, el método preferido para definir la ubicación de los atributos de los vértices es a través de "diseño (ubicación = x)" en GLSL.

En el sombreado de vértices, "atributo" ahora está "en" y "variando" ahora está "fuera". En el sombreador de fragmentos, "variando" ahora está "en" y "gl_FragColor" está definido por una variable "fuera". Creo que gl_FragColor sigue siendo válido, pero ahora es posible usar una variable de salida para definir el color.

This tutorial es muy bueno y enseña el núcleo OpenGL y GLSL 3.30, le recomendaría que lo use para ayudarlo a aprender más sobre GLSL. También recuerde que el GLSL Reference Pages es su amigo.

+4

gracias también miré en el libro "OpenGL 4.0 Shading Language Cookbook "y había un ejemplo de triángulo de color similar que me aclaraba todo. Estaba tan confundido que todas las cosas básicas/triviales estaban obsoletas, me sentía como si alguien me hubiera arrancado la carpa. – ColacX

Cuestiones relacionadas