2010-11-21 10 views
6

Permítanme tener una malla (por ejemplo, esfera) en el centro de la habitación, llena de cubos y una fuente de luz. ¿Cómo puedo hacer que sea rápido y fácil shadow-casting en OpenGL, usando solo funciones "estándar" (fijas)? Nota: el resultado debe contener sombras de cubo y esfera también.Cómo crear sombras rápidas y fáciles, independientes de la escena, sin sombreadores en OpenGL

+1

BTW- "funciones estándar" no son realmente la expresión que está buscando. La "función fija" es más parecida, pero los sombreadores son lo que ha sido "estándar" desde hace algunos años. – Kos

+0

Sí, estaba pensando en cómo llamar esto cuando escribí mi pregunta. ¡Está arreglado ahora, gracias! =) – shybovycha

Respuesta

4

Si puede generar una silueta de la esfera, puede usar shadow volumes. El hardware de nVidia también ha admitido la función fija shadow mapping por un tiempo razonable.

Los volúmenes de sombra tienen la desventaja de requisitos de velocidad de llenado muy altos. Los mapas de sombras pueden ser mejores, pero requieren un pase adicional.

Si se proyecta a un solo plano, puede ser más fácil simplemente project the object on to a plane.

+0

El punto es usar un algoritmo universal, no solo para la silueta esférica =) ¡Pero gracias de todos modos! =) – shybovycha

+0

Lo siento, no he hecho clic en el segundo enlace de alguna manera ... Sí, tenías razón, el mapeo de sombras es lo suficientemente bueno y lo he descubierto yo mismo (soy estúpido) =) – shybovycha

+0

@shybovycha: Solo para que lo sepas. NINGUNA de las técnicas listadas arriba son solo para esferas;) – Goz

2

No hay una manera rápida y fácil. Hay muchas técnicas diferentes, cada una tiene sus pros y sus contras. Puede mirar un proyecto que tengo alojado en github, que usa un código muy simple para crear una sombra, usando la técnica de volumen de sombra (http://iuiz.github.com/VolumeShadow/). Sin embargo, está escrito en Java, pero no debería ser difícil trasladarlo a otro idioma.

Las formas más importantes para crear sombras son el método llamado "asignación de sombras", donde renderiza su escena (con la cámara en la fuente de luz, dirigida a cada objeto de sombra) a una textura. Y la segunda técnica es el método shadow voulume (hecho famoso con Doom3).

+0

Gracias, pero ya tengo la idea =) Proyectarían sombras ser suficiente =) – shybovycha

1

He encontrado una forma de usar StencilBuffers. Al estar un poco confundido por un tiempo, finalmente tuve la idea: con esto, lo más difícil sería recorrer cada fuente de luz y proyectar todos los objetos de la escena. Este se ve más bonito que el sombreado de texturas y funciona más rápido que las sombras volumeric. here y here son algunos recursos que me ayudaron a comprender el paso de la multiplicación de matrices (me confundió un poco cuando estaba mirando a través de la demostración de dino). En cuanto a mí, este método es más fácil de entender y usar. La única pregunta que queda por resolver es cómo calcular la matriz de multiplicación.

Aunque este método podría cambiarse un poco con las texturas as shown here.

¡Gracias a todos! =)

Cuestiones relacionadas