I am working in a project that requieres accurate rendering of planets. Some planets may have as many as 4 textures.
Coloured Texture
Normal Map Texture
Night side texture
Cloud texture
The program will run in a card that has 4 texturing units, so I am hoping that it is possible to achieve all the effects without using shaders. For now I haven’t implemented Normal Mapping, because it is only important for close ups (which is not vital right now), however I am having problems with night+cloud texturing.
I am relativly new to multitexturing (had only used it for detail texturing using GL_ADD_SIGNED_EXT), so I know my logic is failing somewhere. After looking at the results I have to assume GL_PRIMARY_COLOR_EXT is not giving me what I expected (the lighting value for a pixel) in the third pass. I have a working version using glBlend, but it requires 2 passes, and therefore is a tad slower.
Here is the relevant code:
// Earth texture (Unit 0)
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
// Cloud texture (Unit 1 or 2)
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_PRIMARY_COLOR_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_PREVIOUS_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INTERPOLATE_EXT);
// Night texture (Unit 1 or 2)
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB_EXT, GL_PREVIOUS_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB_EXT, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_EXT, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_EXT, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB_EXT, GL_PRIMARY_COLOR_EXT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB_EXT, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB_EXT, GL_INTERPOLATE_EXT);
Earth texture is loaded as GL_BGR
Cloud texture is loaded as GL_LUMINANCE
Night texture is loaded as GL_LUMINANCE
I have tried rendering first the night texture, then the clouds, and the other way around. Here is a screenshot of the results I am getting:
Thanks in advance for your time and help.