Ct1 - 1 текстура Ct2 - 2 текстура Сt3 - маска для этих двух текстур ( черно белая текстура с градацией серого) Нужно чтоб на белых областях маски - отображалась 1 текстура а на черных - 2 текстура. Не подскажите формулу? (используя дополнение GL_ARB_texture_env_combine)
Вот что мне написали на другом форуме: > Не подскажите формулу? a=Ct1 b=Ct2 m=Сt3 r=a*m+b*(1-m) > (используя дополнение GL_ARB_texture_env_combine) INTERPOLATE_ARB.
В итоге я написал вот этот код. Но у меня почему то выводится не то что хотелось бы (см выше). - не подскажите в чем тут ошибка?
Код | LoadTexture ('Grass_001_512.tga', Tex_1, FALSE); LoadTexture ('Ground_001_512.tga', Tex_2, FALSE); LoadTexture ('Earth_mult.tga', Tex_3, FALSE);
glPushMatrix;
// для Arg0 glActiveTextureARB ( GL_TEXTURE0_ARB ); glEnable ( GL_TEXTURE_2D ); glBindTexture ( GL_TEXTURE_2D, Tex_1 ); glTexEnvi ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE );
// для Arg1 glActiveTextureARB ( GL_TEXTURE1_ARB ); glEnable ( GL_TEXTURE_2D ); glBindTexture ( GL_TEXTURE_2D, Tex_2 );
// для Arg2 glActiveTextureARB ( GL_TEXTURE2_ARB ); glEnable ( GL_TEXTURE_2D ); glBindTexture ( GL_TEXTURE_2D, Tex_3 );
// ставим combine mode glTexEnvi ( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE_ARB ); glTexEnvi ( GL_TEXTURE_ENV, GL_COMBINE_RGB_ARB, GL_INTERPOLATE_ARB );
// ставим Arg0 glTexEnvi ( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB, GL_PREVIOUS_ARB ); glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR );
// ставим Arg1 glTexEnvi ( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE ); glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR );
// ставим Arg2 (маска) glTexEnvi ( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_TEXTURE ); glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_COLOR );
glBegin(GL_QUADS); glVertex3f(-5, -5, -0.5); glTexCoord2f(0,0); glVertex3f(-5, 5, -0.5); glTexCoord2f(1,0); glVertex3f( 5, 5, -0.5); glTexCoord2f(1,1); glVertex3f( 5, -5, -0.5); glTexCoord2f(0,1); glEnd; glDisable ( GL_TEXTURE_2D ); glPopMatrix;
|
|