Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: JunXCosio en 01 de Marzo de 2004, 12:16:30 AM

Título: Poner Cielo
Publicado por: JunXCosio en 01 de Marzo de 2004, 12:16:30 AM
 Pues eso que intento a una escena ponerle un Cielo en mi escena.  (ole)

y claro esta que aunque la camara se eleve nunca llegue al cielo no se si me explico.

y que se mueva y esas cosas...

Alguien sabe como puedo hacerlo o sino donde puedo encontrar informacion sobre ello?

muchas gracias de ante mano...

Nota: Es en OpenGL y perdonar por estas preguntas tan chorras pero estoy empezando en este mundillo... :D
Título: Poner Cielo
Publicado por: _Grey en 01 de Marzo de 2004, 03:18:15 AM
 Lo habitual y sencillo es que pongas un cubo o una esfera con el dibujo de las nubes, las montañas a los lados, y en fin, lo que quieras tener de fondo.

El centro de la esfera y el cubo sera la posicion de la camara, asi si giras la vista, veras moverse las montañas del fondo y todo lo demas, pero por mucho que te muevas, nunca llegaras a los limites por que esta en la posicion de la camara.

No tengo links a tutoriales, pero seguro que se pasa mas de uno con ellos.

Espero que te sirva lo dicho  :)

Bye!.
Título: Poner Cielo
Publicado por: Thenend en 01 de Marzo de 2004, 03:24:07 AM
 Nada de preguntas chorras, es una buena pregunta.

Una forma facil y efectiva de hacer un cielo es usando un skybox. He buscado en google y no veo ningún tuto "ideal" sobre el tema. Te pongo uno de gamasutra que te ayuda a hacerte una idea de lo que son y de como crearlos:

http://www.gamasutra.com/features/19981023/bell_01.htm

También hay uno en gametutorials pero me lo acabo de bajar y me parece que no sirve de nada porque la cámara se mueve en relación al skybox y por lo tanto no se consigue el efecto deseado, pero viene con unas texturas que puedes utilizar en tu escena:

http://www.gametutorials.com/Tutorials/ope.../OpenGL_Pg2.htm

Como no me parece que ninguno de los dos te solucione el tema te doy una pequeña explicación de de que va esto.

Como segúramente ya sabrás, a la hora de renderizar una escena, cada pixel tiene un valor almacenado en el "z-buffer" que indica lo lejos que está de la cámara, de manera que solo podamos sobreescribir ese pixel con otro que pertenezca a un objeto que esté mas cerca que él. Así no influye el orden en el que se dibujan los polígonos sino la distancia a la que están.

Cuando comenzamos a dibujar un frame los valores del z-buffer indican que ese pixel está en la posición mas lejana posible. Si en ese momento dibujamos un polígono y le decimos que no escriba en el buffer la distancia a la que está sino que deje el valor z tal y como está, ese polígono siempre será el mas lejano y todos los demás se dibujarán encima de él. Y eso es exáctamente lo que ocurre con el fondo ¿no?

Bien, pues ahora imagina que cojes una caja de cartón, le pintas unas montañas por dentro, te la pones en la cabeza y la renderizas de esta manera en la escena. ¿Ya lo pillas? Como llevas la cabeza dentro, mires donde mires la ves y como se mueve contigo nunca llegas chocarte con ella. Y no te impide ver los objetos que tienes a tu alrrededor porque como se supone que está lo mas lejos posible (porque no ha escrito el buffer-z), todos los objetos se dibujan encima de ella, da igual la distancia a la que esté, aunque la tengas pegada a la nariz.

Bueno, y en la parte técnica, si estás en OpenGL necesitarás usar glDisable(GL_DEPTH_TEST); cuando dibujes la caja y glEnable(GL_DEPTH_TEST); cuando termines, para que los polígonos se sobreescriban normalmente.

No se si me he explicado bien. A ver si te ayuda.

EDIT: anda, mientras lo escribia ha contestado Grey xD
Título: Poner Cielo
Publicado por: JunXCosio en 01 de Marzo de 2004, 02:34:12 PM
 Voy a probar todo eso...

Ya os contare, muchaaaaaaas gracias... (ole)  
Título: Poner Cielo
Publicado por: JunXCosio en 02 de Marzo de 2004, 02:57:21 PM
 Lo he hecho y chapo... pero tengo un par de dadas:

1º De que me sive desactivar y activar el z-buffer si todos los objetos se dibujan dentro del cubo o skybox???
Digo esto porque he probado hacer lo de las dos formas y la cosa es la misma si me acerco muchoooooo llego a salirme del skybox de las dos maneras (con el z-buffer o si el), la unica deferencia es que los objetos se ven simpre... No se si me explico bien...

mirar este es parte del codigo en la funcion render desactivando y :

gluLookAt(Camara.m_posicion.m_fX, Camara.m_posicion.m_fY, Camara.m_posicion.m_fZ,
    Camara.m_vista.m_fX,    Camara.m_vista.m_fY,    Camara.m_vista.m_fZ,
    Camara.m_altura.m_fX,   Camara.m_altura.m_fY,   Camara.m_altura.m_fZ);

   //------- Ponemos el SkyBox -------
   glDisable(GL_DEPTH_TEST); //Desactivamos el Z-Buffer
   CrearSkyBox();
   glEnable(GL_DEPTH_TEST); //Activamos el Z-Buffer
   //...


Y mi otra prgunta es si sabeis de algun sitio que pueda pillar unas imagenes para hacer skybox como las de  gametutorials...

Muchas gracias por vuestro tiempo que sois la hostia  (ole)
Título: Poner Cielo
Publicado por: Thenend en 02 de Marzo de 2004, 03:41:47 PM
 La gracia del efecto es que el cubo se mueve contigo, el tutorial de DigiBen está mal, esa no es la idea y de hecho sirve de poco porque como dices te puedes salir del cubo. Tienes que dibujar el cubo aplicando las rotaciones de la cámara pero no el desplazamiento, de esta manera siempre estarás en el centro del cubo, como dice Grey. Y da igual el tamaño del cubo, puedes hacerlo mas pequeño que la escena, de hecho deberías porque si está mas lejos que el plano lejano del frustum no se verá, y si está mas cercano tapará algunos objetos irremisiblemente.

Skyboxes, según el tuto de gametutorials, tienes aqui:

http://www.planethalflife.com/crinity/skymain.htm

Talué.
Título: Poner Cielo
Publicado por: AgeR en 02 de Marzo de 2004, 04:36:36 PM
 También puedes hacertelos tú con Terragen.

Saludos!
Título: Poner Cielo
Publicado por: _Grey en 02 de Marzo de 2004, 10:51:19 PM
 La razon para desactivar el ZBuffer (cosa que no puntualice en el primer mensaje), es que, por problemas de precision y de maximos y minimos, es por ellos que es posible que los topes del cubo no se dibujen o incluso que algun objeto quede "detras" de los poligonos del skybox, como es "el fondo" podemos permitirnos tratarlo sin ZBuffer y de paso ahorrarnos estos problemas, siempre sera "lo mas lejano".

Saludotes.
Título: Poner Cielo
Publicado por: JunXCosio en 02 de Marzo de 2004, 11:06:38 PM
 Ok entendido mas o menos ... :blink:  
Título: Poner Cielo
Publicado por: Lord Trancos 2 en 02 de Marzo de 2004, 11:23:45 PM
Cita de: "AgeR"También puedes hacertelos tú con Terragen.

Saludos!
No tendras por casualidad el terraSky, ¿verdad?
Es que en la web de terragen no esta disponible, y aunque lo he buscado en google todo lo que encuentro son links 404
Título: Poner Cielo
Publicado por: AgeR en 03 de Marzo de 2004, 12:22:44 AM
 Pues no lo tengo, no.  :(

Saludos!