Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Aprender Programar Shadrs (hlsl, Glsl)

Iniciado por Javi SJ Cervera, 06 de Febrero de 2006, 02:20:16 PM

« anterior - próximo »

Javi SJ Cervera

 Buenas. La verdad es que en el tema de los shaders ando un poco verde, y quisiera aprender a programarlos.

Me interesan HLSL y GLSL. ¿Es el lenguaje de estos dos similar? Teniendo un shader en HLSL... ¿es sencillo pasarlo al otro?. ¿HLSL y FX son lo mismo? He visto que ambos son shaders de DX.

Pues nada, a ver si alguno sabéis de tutoriales donde se enseñe a programar en HLSL y/o GLSL, o incluso de libros para estos lenguajes.
== Jedive ==

nsL

 El libro de openGL que sako Anaya editado en el 2005 (traduccion del Super Bible) tiene un apartado sobre GLSL. Quizas sea demasiado caro como para comprar el libro solo por ese apartado, asi q lo puedes buscar en la biblioteca municipal mas cercana ;)

Saludos!
Yo no muero hasta la muerte -


Lord Trancos 2

on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Javi SJ Cervera

 Pues muchas gracias. Creo que con esto la parte GLSL estaría resuelta. ¿Acerca de HLSL alguien puede decirme tutos y libros? ¿Y sobre las otras preguntas, alguien podría orientarme?
== Jedive ==

Lord Trancos 2

 Yo de HLSL, ni papa. Pero es de imaginar que en el SDK de DX habran, no?  
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

seryu

 Nvidia saco el famoso CG que permitia trabajar con sintaxis de C los shaders, a partir de ellos se crearon los HLSL de directx, es por esto que entre ambos hay pocas diferencias.

GLSL es la "respuesta" de OpenGL al HLSL de Direct3d. La filosofia de ambos es distinta pero se parecen.

.fx es simplemente la extension que se usa para este tipo de ficheros.

Mi preferencia es GLSL al igual que prefiero OpenGL a Direct3d. Pero claro, OpenGL depende mucho mas de los drivers y del hardware que direct3d, y eso a veces da problemas (sobretodo en windows  :P )

Como se que te gusta leer:

http://oss.sgi.com/projects/ogl-sample/reg...ull.1.10.59.pdf

Elvis Enmanuel


BeRSeRKeR

 Ya que Cg y HLSL son prácticamente idénticos, como introducción a la programación de shaders podría servirte The Cg Tutorial. Eso sólo si lo que te interesa es lo que es la programación del shader en sí. Si lo que quieres es también saber cómo se crean, pasan parámetros y demás, dentro de la aplicación, entonces ya no te servirá puesto que en ese caso Cg y HLSL sí que se diferencian.

En cuanto a los Fx son interfaces donde puedes, aparte de crear shaders, definir efectos de múltiples pasadas con sus render states, sampler states, etc. Nosotros la verdad es que los utilizamos para poco más que almacenar shaders y funciones pero tienen bastante potencial.

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

HgH

 Puedes descargarte también el libro The complete HLSL reference de Paradoxal Press.
Otra recomendación sería bajarte el RenderMonkey de ATI. Es sencillo de usar y viene bastante bien para trastear con shaders, tanto con GLSL como con HLSL
gH _ TLOTB
..................
"No queremos estar obligados, por nada ni nadie, a pensar sólo en lo que es más comercial. Siempre seremos, antes que nada, programadores"

- Equipo de Zigurat -

MrSickman

 Te recomiendo este libro para HLSL, es sencillo y bastante completo para empezar a crear shaders.

http://www.amazon.com/gp/product/159200092...glance&n=283155
a href='http://gpufever.blogspot.com/' target='_blank'>GPUFever blog

zupervaca

 Te pongo unos shaders de cada (son en asm, pero la mar de sencillos):

VertexShader de Direct3D:

vs.1.1

// c0-c3 = Matriz de transformacion

dcl_position v0  // v0 = posicion
dcl_color  v1  // v1 = color
dcl_texcoord0 v2  // v2 = coordenadas de textura


m4x4 oPos, v0, c0 // Retornamos transformacion,
mov oD0, v1   // color,
mov oT0, v2   // coordenadas de textura 0 y
mov oT1, v2   // coordenadas de textura 1.


El mismo que el anterior pero para opengl:

!!ARBvp1.0

# Entrada
ATTRIB inPosition = vertex.position;
ATTRIB inTexcoord0 = vertex.texcoord[0];
ATTRIB inColor  = vertex.color;
PARAM viewproj0 = program.env[0];
PARAM viewproj1 = program.env[1];
PARAM viewproj2 = program.env[2];
PARAM viewproj3 = program.env[3];

# Salida
OUTPUT outPosition  = result.position;
OUTPUT outTexcoord0 = result.texcoord[0];
OUTPUT outTexcoord1 = result.texcoord[0];
OUTPUT outColor  = result.color;

# Funcion
DP4 outPosition.x, viewproj0, inPosition;
DP4 outPosition.y, viewproj1, inPosition;
DP4 outPosition.z, viewproj2, inPosition;
DP4 outPosition.w, viewproj3, inPosition;
MOV outTexcoord0, inTexcoord0;
MOV outTexcoord1, inTexcoord0;
MOV outColor, inColor;

END


Si te fijas en estos shaders de asm son muy parecidos, si no casi iguales en instrucciones, en direct3d los registros constantes se llaman "c" y un numero, en opengl son un array llamando "program.env", para multiplicar matrices direct3d da una instruccion llamada "m4x4", pero realmente tiene una tambien llamada como en opengl "dp4", el dcl_* es el mismo sistema que el ATTRIB, "result.position" de opengl es lo mismo que "oD0" en direct3d, si te sigues fijando realmente es lo mismo, pero cambiando cuatro cosas, por lo menos para estos dos vertexshaders tan sencillos.
En opengl no haria falta pasarle la matriz de proyeccion y la de vista ya que se puede acceder a ella directamente desde el shader, a mi parecer a mi me gusta mas el asm de opengl ya que es mucho mas visible al ojo del programador, ademas podrias poner este shader y funcionaria correctamente:

!!ARBvp1.0

# Funcion
DP4 result.position.x, program.env[0], vertex.position;
DP4 result.position.y, program.env[1], vertex.position;
DP4 result.position.z, program.env[2], vertex.position;
DP4 result.position.w, program.env[3], vertex.position;
MOV result.texcoord[0], vertex.texcoord[0];
MOV result.texcoord[1], vertex.texcoord[0];
MOV outColor, vertex.color;

END

Como se ve opengl ha sabido hacer un lenguaje asm muy bueno, pero a cambio de no saber si funcionara o no ya que no sabes que registros esta o no usando.

Tal vez despues de ver esto te guste mas el asm ;)

Javi SJ Cervera

 Muchas gracias a todos! Estoy acumulando links de sobra para estar un buen rato trasteando.
== Jedive ==






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.