OpenGL ES 1 multi-texturing with different uv coordinates

I need to render an object using multitexturing, but both textures have different uv coordinates for the same object. One is a normal map, and the other is a light map.

Please provide any useful material on this.

+5
source share
1 answer

In OpenGL ES 2, you still use shaders. Thus, you can freely use any texture coordinates that you like. Just add an additional attribute for the second pair of cooridnate textures and delegate this to the fragment shader, as usual:

...
attribute vec2 texCoord0;
attribute vec2 texCoord1;

varying vec2 vTexCoord0;
varying vec2 vTexCoord1;

void main()
{
    ...
    vTexCoord0 = texCoord0;
    vTexCoord1 = texCoord1;
}

:

...
uniform sampler2D tex0;
uniform sampler2D tex1;
...
varying vec2 vTexCoord0;
varying vec2 vTexCoord1;

void main()
{
    ... = texture2D(tex0, vTexCoord0);
    ... = texture2D(tex1, vTexCoord1);
}

, , ( glVertexAttribPointer). , GLSL, OpenGL ES 1. , .

EDIT:. OpenGL ES 1, . , , , , -.

glActiveTexture(GL_TEXTUREi) i- . , , i- (, glBindTexture, glTexEnv gl(En/Dis)able(GL_TEXTURE_2D)).

glTexCoordPointer, , glCientActiveTexture(GL_TEXTUREi) , glTexCoordPointer glEnableClientAttrib(GL_TEXTURE_COORD_ARRAY).

- :

//bind and enable textures
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, <second texture>);
glTexEnv(<texture environment for second texture>);   //maybe, if needed
glEnable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, <first texture>);
glTexEnv(<texture environment for first texture>);   //maybe, if needed
glEnable(GL_TEXTURE_2D);

//set texture coordinates
glClientActiveTexture(GL_TEXTURE1);
glTexCoordPointer(<texCoords for second texture>);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTexture(GL_TEXTURE0);
glTexCoordPointer(<texCoords for first texture>);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

//other arrays, like glVertexPointer, ...

glDrawArrays(...)/glDrawElements(...);

//disable arrays
glClientActiveTexture(GL_TEXTURE1);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glClientActiveTexture(GL_TEXTURE0);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

//disable textures
glActiveTexture(GL_TEXTURE1);
glDisable(GL_TEXTURE_2D);
glActiveTexture(GL_TEXTURE0);
glDisable(GL_TEXTURE_2D);

, , , 0. , , , . , , (GL_TEXTURE0) , , -, .

EDIT: (glBegin/glEnd) , glTexCoordPointer, . glClientAttribTexture, . glMultiTexCoord(GL_TEXTUREi, ...) (GL_TEXTURE0, GL_TEXTURE1,...) glTexCoord(...). , OpenGL ES . .

+6

All Articles