Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Projective texturing - Back projection

Iniciado por misscelan, 06 de Marzo de 2008, 10:03:17 AM

« anterior - próximo »

misscelan

Buenas

Estoy intentando eliminar la back-projection de una textura proyectada desde la fixed-pipeline, veo un montón de pdfs o páginas que hablan de interpolar la coordenada "q" de la textura projectada con una textura1d para eliminar los valores negativos de esta, aquí dejo unos links con extractos.

http://www1.cs.columbia.edu/~ravir/6160/papers/shadow_mapping.pdf

"Another problem that comes up with any projective texture mapping is the phantom
"negative projection". This is actually pretty simple to remove at the cost of an
additional texture unit, or per-vertex color. The goal is just to make sure that the shadow
test always returns "shadowed" for surfaces behind the light."

Projective Texture Mapping - Nvidia Developers

"The sign of q becomes negative behind the projector, which inverts the texture image
in the reverse projection. Typically applications use a 1D texture or other interpolated
quantity to eliminate color contribution when the q coordinate of the projective texture
becomes negative."

http://ati.de/products/imageon238x/IMAGEON_238X_Rooms_Demo_Whitepaper.pdf

"Traditionally, the back projection is resolved by using a 1D texture with a black texture
border and OBJECT_LINEAR texture coordinate generation to fetch a value of black
behind the light plane and white in front of it."

http://216.239.59.104/search?q=cache:57RgGeIZIYgJ:www.cse.unsw.edu.au/~cs9018/lectnotes/ps/pt7.ps.gz+projective+texturing+1d+GL_OBJECT_LINEAR&hl=es&ct=clnk&cd=2&gl=es&client=firefox-a"

"Use a 1D texture that lives in the q plane and
then modulate projective texture by 1D texture."

El caso es que no sé por donde empezar, alguna ayuda???

Un saludo.

misscelan

Paso de la fixed!!, me jode porque sólo tengo pensado usar los shaders para eliminar esta proyección pero es que lo otro es engorroso para aburrir, pero bueno como siempre que me pongo con una cosa nueva vienen los problemas.

Esto es con la fixed:


Esto es con GLSL


La sombra en glsl se mueve bien, se orienta con la dirección de la luz pero es como si tuviese un radio de alejamiento del muñeco, además de tener un escala extraña.

ASí es como pongo la matriz de la textura
   glActiveTextureARB( GL_TEXTURE2_ARB);
   glEnable(GL_TEXTURE_2D);
   glMatrixMode( GL_TEXTURE);
   glLoadIdentity();
   glTranslatef(0.5, 0.5, 0);
   glScalef(0.5, 0.5, 1);
   gluPerspective(10.0f, (float)conf_get_scr(SCR_WD)/ (float)conf_get_scr(SCR_HG), 0.01, 100.0f);
   gluLookAt(-36.80, -10.08, -0.81,
             mos->mosinstance[instance].posicion.x,
             mos->mosinstance[instance].posicion.y,
             mos->mosinstance[instance].posicion.z,
             0.0, 1.0, 0.0);

   // Set up TexGen
   glEnable(GL_TEXTURE_GEN_S);
   glEnable(GL_TEXTURE_GEN_T);
   glEnable(GL_TEXTURE_GEN_R);
   glEnable(GL_TEXTURE_GEN_Q);
   glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
   glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
   glTexGeni(GL_R, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
   glTexGeni(GL_Q, GL_TEXTURE_GEN_MODE, GL_EYE_LINEAR);
   glTexGenfv(GL_S, GL_EYE_PLANE, PS);
   glTexGenfv(GL_T, GL_EYE_PLANE, PT);
   glTexGenfv(GL_R, GL_EYE_PLANE, PR);
   glTexGenfv(GL_Q, GL_EYE_PLANE, PQ);

   glPushMatrix();


Así es como la activo antes de renderizar

 glActiveTextureARB( GL_TEXTURE2_ARB);
 glBindTexture(GL_TEXTURE_2D, id_texture_stages[i]);
 glEnable(GL_TEXTURE_2D);
 glMatrixMode( GL_TEXTURE);
 glPopMatrix();


Y así es como lo pongo en el shader
gl_TexCoord[2] = gl_TextureMatrix[2] * gl_Vertex;
//también probé con gl_ModelViewMatrix


Ayuda por favor!!!

Muchas gracias.

Prompt

date cuenta que en OpenGL, la coordenada de pantallas 0, 0 es abajo a la izquierda.

Y date también cuenta que la sombra es igual que el muñecote, en pequeñito ( por el tamaño de la textura )


Y date cuenta que esa sombra no está proyectada. Posiblemente porque no sacas la "foto" desde la luz y lo haces desde la cámara.

Creo que te estas saltando algún paso :), es posible?

Antes de aplicarle el shader cambia la cámara en la posición de la luz, saca la sombra, pon otra vez la camara en su sitio y "pega" la sombra.

Consejo: respira y tranquilizate misscelan! :D

misscelan

Ya respiré prompt, jejeje.

Pues resulta que en el fragment tenía texture2D y había que usar texture2DProj,
no sé muy bien el porqué funciona con uno y con otro no, alguien me puede aclarar la duda?

Un saludo!.


AK47

Es una textura proyectada en los polígonos que le has dicho a openGL, ese que está en vertical y luego ese que esta en horizontal haciendo de suelo. openGL no controla si el polígono vertical ocluye la sombra en el suelo, eso lo tienes que "arreglar" tu de alguna forma.

Prompt

Exacto, a ver si luego miro y te digo como solucionarlo que es una chorrada.






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.