Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: GL_COMBINE 2 Textures



Hi Lorenzo,

I'm not sure that these are your problems, but here are a few issues to look at:

- The combine extension doesn't guarantee that you can use any texture as any source to a combine op.[ You do

>     glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE0);

I don't know about the crossbar extension but without it this is illegal - use GL_PREVIOUS as your source to get the last texture.

- It's been my experience that you need to specify every aspect of the combine op...this may just be me being paranoid, but I would consider putting _something_ in the alpha channel for this.

- I don't think 'combine' will mix 100% of A + 30% of B - it will give you 70% of A and 30% of B. To get that, bind your constant (0.3) to input 2 and your two textures (GL_PREVIOUS and GL_TEXTURE) to input 0 and 1.

- A way to get 30% + 100% with two tex units (which you might as well do anyway since you have to use two tex units to do do two textures) is to put the 30% texture in the first unit and modulate it with a constant of 0.3. Then put the second tex in unit one and use add.

- You can accomplish the above without using GL_COMBINE at all, as long as it's all you want, just use 0.3 for your color, GL_MODULATE and GL_ADD as the tex modes.

This all gets a lot trickier if you want (100% of A + 30% of B) * local_lighting...

*Cheers*
Ben


Lorenzo wrote:
Hi,
I am trying to mix 2 textures. 100% of the first texture + 30% of the second
texture. I wrote the following code, but I get bad results. Do you know
where is my mistake?

    glActiveTexture(GL_TEXTURE0);
    glEnable(GL_TEXTURE_RECTANGLE_EXT);
    glBindTexture(GL_TEXTURE_RECTANGLE_EXT, textures_rect[0]);

    glActiveTexture(GL_TEXTURE1);
    glDisable(GL_TEXTURE_RECTANGLE_EXT);
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, textures_2D[0]);

glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvf(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE0);
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
// Point A
GLfloat blendColor[4] = {1.0, 1.0, 1.0, 0.3};
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, blendColor);
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_CONSTANT);
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_ALPHA);
// Point B
glTexEnvf(GL_TEXTURE_ENV, GL_SOURCE2_RGB, GL_TEXTURE1);
glTexEnvf(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_COLOR);



I even inverted the point A with the point B but I get bad results again.


Best Regards
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Mac-opengl mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/mac-opengl/email@hidden

This email sent to email@hidden
References: 
 >GL_COMBINE 2 Textures (From: Lorenzo <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.