Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





(opengl) Problemas Con Dot3_rgba

Iniciado por DraKKaR, 07 de Agosto de 2003, 01:36:17 PM

« anterior - próximo »

DraKKaR

 Holas, estoy intentando hacer iluminacion por pixel usando mapas de atenuacion y dot3., de hecho ya lo he conseguido, pero he encontrado un problema a la hora de mejorarlo.

Ire al grano: a ver si sabeis los opengleros porque esto no funciona.

Primero de todo limpio los valores (r,g,b,a) del frame buffer por unos conocidos:

glColor4f(0,0,0,1);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_BLEND);
RenderRawTris(par,vdat);
glEnable(GL_BLEND);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);


Inmediatamente despues de eso:


glEnableClientState(GL_COLOR_ARRAY);
glColorPointer(3, GL_FLOAT, 0, vdatogl->dot3_color);

glTexCoordPointer(3,GL_FLOAT,0,vdatogl->GetTexCoordArray(par->texcoord_source0));
glBindTexture(GL_TEXTURE_2D,normalmap->GetID());    

glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_COMBINE_ARB);
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE0_RGB_ARB,GL_PRIMARY_COLOR_ARB);
glTexEnvi(GL_TEXTURE_ENV,GL_SOURCE1_RGB_ARB,GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND0_RGB_ARB,GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV,GL_OPERAND1_RGB_ARB,GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV,GL_COMBINE_RGB_ARB,GL_DOT3_RGBA_ARB);

glColorMask(GL_FALSE,GL_FALSE,GL_FALSE,GL_TRUE);
glBlendFunc(GL_ONE,GL_ZERO);
RenderRawTris(par,vdatogl);

glDisableClientState(GL_COLOR_ARRAY);
glColorMask(GL_TRUE,GL_TRUE,GL_TRUE,GL_TRUE);
glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);


La idea del codigo anterior es que calcule el dot3 entre el color interpolado por vertice y el mapa de normales (esto lo hace bien). El problema esta en que quiero que el resultado tambien me lo meta en el canal alpha, poruqe quiero hacer operaciones de blending sobre este. Se supone que GL_DOT3_RGBA mete el resultado tambien en el canal alpha. Ademas, con el colormask deshabilito el color buffer para que solo se actualice el alpha buffer. Y la funcion de blend anterior haria que este canal alpha calculado con el dot3 se copiara sin mas en el frame buffer. Depues de pintar, vuelvo a habilitar el colorbuffer para hacer mas renders normal.

EL problema es: creo que despues de hacer eso no hay nada en el alpha buffer porque al ahcer esto (inmediatamente despues), no funciona:

glBlendFunc(GL_ZERO,GL_SRC_ALPHA);
RenderRawTris(par,vdat); // renderizar la misma geometria sin mas


Tras la ejecucion del primer codigo tendria ke tener por cada pixel del frame buffer (0,0,0,dot3). Asi que al aplicar la nueva funcion de blending, deberia multiplicar el alpha calculado anteriormente por el nuevo color de destino. Con lo que el resultado final deberia ser la geometria base atenuada mas o menos en cada pixel por el resultado del dot3 en el canal alpha. Pero no es así!!!: el resultado es sin mas todo de color negro.



Porqueeeeee!!






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.