Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Формула для наложения маски текстуры


Автор: Maksitron 5.7.2009, 14:06
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;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)