Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: Drácula en 01 de Enero de 1970, 01:00:00 AM

Título: Reflejos del avión en el mar
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Bien, el avión ya vuela y el mar está formado por un perlin noise que da una buena impresión. Pero ahora debo hacer que el avión refleje en el mar. Sin embargo, al tener olas , no puedo utilizar la típica matriz de reflejo. Entonces se me ocurre:

a-En lugar de hacer el reflejo proyectar la sombra

b-Utilizar la técnica que aparecen en NVidia sobre proyecciones de luz para hacer Shadows. Es decir, primero renderizamos visto desde arriba y luego asociamos vértices con coordenada de textura.

¿Alguna idea sobre estos método u otros que se os ocurran?                                
Título: Reflejos del avión en el mar
Publicado por: Tei en 01 de Enero de 1970, 01:00:00 AM
                                te habla un artista, no un programador.
si puedes renderizar  el avion con alfa, invertido respecto al eje que marca el horizonte, te quedara un reflejo majo.

no pienso que esto cueste mucho, y creo que quedaria bien. Lo de las sombras y todo eso,
sobre una superficie que dices tiene olas..
buff...
..por cierto ¿olas? ¿porque? ¿tratas de ser realista?. Generalmente los aviones vuelan muy alto para apreciar la olas como otra cosa que no sea una textura. Ahora bien, si ya lo tienes programado, estoy seguro que tendra una pinta tremenda, aunque a menos que le metas una tormenta de cojones igual queda algo irreal. O no.                                
Título: Reflejos del avión en el mar
Publicado por: KILE en 01 de Enero de 1970, 01:00:00 AM
                                Umm puedes guardar el reflejo de la matriz normal en una textura (Render to texture) y luego usando multitextura aplicar al mar la textura del mar y encima con blending la textura del reflejo de forma q se adapte a su forma                                
Título: Reflejos del avión en el mar
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                A Tei:
Eso no quedaría bien por que hay olas. ¡Y olas altas! De forma que no puedo aplicar un reflejo porque no se puede aplicar a una superficie no uniforme.

A Kile:
Ese es el método 2 que expongo, el de Shadow Mapping de Nvidia. Pero me parece que quizás debería haber algo un poco más sencillo...                                
Título: Reflejos del avión en el mar
Publicado por: KILE en 01 de Enero de 1970, 01:00:00 AM
                                Hombre puff yo sinceramente no se me ocurre otro método y tampoco creo que haya algo mas sencillo que eso porque no es algo trivial. Prueba ese metodo que aunque te lleve algo mas de tiempo es el que te va a llevar buscar otro más sencillo y si lo encuentras implementarlo :lengua:                                
Título: Reflejos del avión en el mar
Publicado por: samsaga2 en 01 de Enero de 1970, 01:00:00 AM
                                Si quieres un reflejo "realista" podría ser muy costoso.

Por cada poligono del mar tendrias que dibujar la escena desde el punto de vista de ese poligono, guardarla como textura y finalmente aplicar esa textura a ese poligono en el trazado final de la escena.

Me lo acabo de inventar, cuela? :sonriendo:
                               
Título: Reflejos del avión en el mar
Publicado por: synchrnzr en 01 de Enero de 1970, 01:00:00 AM
                                La próxima vez que vayas a la playa, mírate bien el agua a ver qué refleja... :ojo:

Sync :guay:                                
Título: Reflejos del avión en el mar
Publicado por: Tei en 01 de Enero de 1970, 01:00:00 AM
                                no me imagino el oceano como algo muy reflectante, un lago a lo mejor si, pero el mar me lo imagino como muy "rugoso" y ahi mejor aplicar una sombra. Digo.
mi idea de poner el avion invertido... es verdad que igual se ve mal, cherto, lo reconosco.                                
Título: Reflejos del avión en el mar
Publicado por: samsaga2 en 01 de Enero de 1970, 01:00:00 AM
                                Poz zi, hay que reconocer que el mar tiene un tono mate. Incluso las sombras de los objetos que están a unos centimetros de distancia del mar ya no se ven (lo estuve comprovando el otro dia en la playa :sonriendo:. Lo único detacable que se ve (aparte de toda esa mierda flotando) son los reflejos del sol ademas que a menos profundidad el agua es más clara (por la arena del fondo supongo).
Creo que haciendo los reflejos y que el agua se vea mas clara en las orillas sería suficiente para dar realismo.                                
Título: Reflejos del avión en el mar
Publicado por: synchrnzr en 01 de Enero de 1970, 01:00:00 AM
                                No hay nada como la observación para darte cuenta de ese tipo de cosas :ojo:

Ya puestos, ¿qué tal utilizar una especie de "layered fog" para que el agua se vea transparente a los items que están flotando a poca profundidad o en las orillas y de un tono azul verdoso oscuro en las zonas profundas que correspondería al color del layered fog? (Por dar ideas, que no quede...)

Sync :guay:

PD: Bien pensado eso sería más para un juego de submarinos que de aviones... XDDD

[ Este Mensaje fue editado por: synchrnzr el 2002-07-19 18:46 ]                                
Título: Reflejos del avión en el mar
Publicado por: Tei en 01 de Enero de 1970, 01:00:00 AM
                                el otro dia me pasaran esta funcion para hacer los brillos de underwater para los poligonos:



void EmitUnderwaterPolys (msurface_t *fa)

{

glpoly_t *p;

float  *v;

int   i;

float  s, t, os, ot;

int tn;



//GL_Bind (underwatertexture);

//tn = (int)(host_time * 20)%31;

//glBindTexture (GL_TEXTURE_2D, causticstexture[tn]);

glBindTexture (GL_TEXTURE_2D, shinytexture);



glEnable (GL_BLEND);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);//GL_DECAL);

glColor4f (1,1,1,0.01f);

glBlendFunc(GL_DST_COLOR, GL_SRC_COLOR);



for (p=fa->polys; p; p=p->next)

{

 glBegin (GL_POLYGON);

 for (i=0,v=p->verts[0]; i<p->numverts; i++, v+=VERTEXSIZE)

 {

  os = v[3];

  ot = v[4];



  s = os + turbsin[(int)((ot*0.5+(realtime*0.5)) * TURBSCALE) & 255];

  s *= ((0.5/64)*(-1))*3;



  t = ot + turbsin[(int)((os*0.5+(realtime*0.5)) * TURBSCALE) & 255];

  t *= ((0.5/64)*(-1))*3;



  glTexCoord2f (s, t);

  glVertex3fv (v);

 }

 glEnd();

}

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glDisable (GL_BLEND);

glColor4f (1,1,1,1);

}

//QMB!



probablemente no la pueda usar nuestro amigo del avion. pero como salio el tema, lo cuento al hilo...

Aqui teneis un shot:
http://www.planetquake.com/QMB/screens/qmb...04/caustics.jpg

aunque no se ve muy bien, ya se sabe que hay efectos que interesan por como se animan.. y un shot no los recoge bien (y en el shot utilizan una underwater fog un poco rara).                                
Título: Reflejos del avión en el mar
Publicado por: Drácula en 01 de Enero de 1970, 01:00:00 AM
                                Esto que has expuesto lo único que hace es modificar las coordenadas de textura. No me sirve, pero gracias, nunca se sabe cuando puedes utilizarlo.

Bien, gracias a todos. Al final hago una sombra y punto. La verdad es que queda muy muy bien con el perlin noise que genera el mar, porque se ve como se adapta a las olas y da una muy buena impresión. Pronto subiré una demo para que podais ver y hacer críticas constructivas.
                               
Título: Reflejos del avión en el mar
Publicado por: Ionicboy en 01 de Enero de 1970, 01:00:00 AM
                                ahora mismo lo q me estoy imaginando es un avion volando bajo mientras esquiva olas de 10 metros...

pos eso, queria comentarlo... :lengua: