Problemas con Dot3_RGBA

Veamos si es verdad que hay mas gente que hable español que ingles, ahi va mi problema.

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:
CODE

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:

CODE

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:
CODE

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!!

PD: Si veo que nadie se entera lo intentare reescribir en spanglish, perdonen las molestias.

If you don’t even have the decency to post in english…

Wenn du halt zu faul bist Spanisch zu lernen, dann ist das doch dein Problem.

Here’s a link to a machine translation:
http://translation.lycos.com/lycos?systr…an_f=1060266853

I’m not sure if the link will work.

Apesadumbrado, DraKKaR, sino yo no tenga una respuesta a su pregunta.

Here’s a tip. Since English is considered the International language aka Lingua Franca, then it’s best to post things in English unless the message board rules specifically say otherwise. You will get more help this way.

-SirKnight

[This message has been edited by SirKnight (edited 08-07-2003).]

the automatic translation is quite funny… but “opengleros” is a great word.

let us all be OpenGLeros!!

Jan

Jan2000: Val dood en goed hard ook!

If you don’t speak English, and you have an OpenGL question, where else should you post? Personally, I don’t have a problem with it.