Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.14;
Скачать: CL | DM;

Вниз

блендинг текстур по маске   Найти похожие ветки 

 
Trimp ©   (2006-07-25 18:21) [40]

В чём ошибка то была?


 
korvin88   (2006-07-25 19:02) [41]

Trimp
Чья? Моя? В ДНК, надо полагать, раз так долго все это рожал :))). Но и ты тоже немного ошибся в последнем примере. Перепутал параметры - они должны относиться к маске, т.е. к первой текстуре, а не нулевой :). Это меня долго смущало. Плюс ко всему я никак не мог допереть, что маску легче сделать с альфой (возможно даже, без альфы - никак). Ну и баги по мелочи. Ну сейчас хоть работает :)). Если интересно, то вот правильная процедура (пока не оптимизировал - наверняка это все можно свести к более простой форме).


Procedure DrawMaskedPolygon(PMask,PTex1,PTex2 : GLUint; x1,y1,z1,x2,y2,z2,x3,y3,z3,x4,y4,z4 : GLfloat);
begin
 glPushAttrib(GL_ALL_ATTRIB_BITS);
   glActiveTextureARB(GL_TEXTURE0_ARB    );
   glEnable          (GL_TEXTURE_2D      );
   glBindTexture     (GL_TEXTURE_2D,PTex2);
   glTexEnvi         (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE ,GL_COMBINE_ARB    );
   glTexEnvi         (GL_TEXTURE_ENV,GL_COMBINE_RGB_ARB  ,GL_REPLACE        );
   glTexEnvi         (GL_TEXTURE_ENV,GL_COMBINE_ALPHA_ARB,GL_REPLACE        );

   glActiveTextureARB(GL_TEXTURE1_ARB    );
   glEnable          (GL_TEXTURE_2D      );
   glBindTexture     (GL_TEXTURE_2D, PMask);
   glTexEnvi         (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE ,GL_COMBINE_ARB    );
   glTexEnvi         (GL_TEXTURE_ENV,GL_COMBINE_RGB_ARB  ,GL_INTERPOLATE_ARB);
   glTexEnvi         (GL_TEXTURE_ENV,GL_COMBINE_ALPHA_ARB,GL_REPLACE        );

   glActiveTextureARB(GL_TEXTURE2_ARB    );
   glEnable          (GL_TEXTURE_2D      );
   glBindTexture     (GL_TEXTURE_2D,PTex1);
   glTexEnvi         (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE ,GL_COMBINE_ARB    );
   glTexEnvi         (GL_TEXTURE_ENV,GL_COMBINE_RGB_ARB  ,GL_INTERPOLATE_ARB);
   glTexEnvi         (GL_TEXTURE_ENV,GL_COMBINE_ALPHA_ARB,GL_REPLACE        );

   glTexEnvi (GL_TEXTURE_ENV,GL_SOURCE0_RGB_ARB   ,GL_PREVIOUS_ARB);
   glTexEnvi (GL_TEXTURE_ENV,GL_OPERAND0_RGB_ARB  ,GL_SRC_COLOR   );

   glTexEnvi (GL_TEXTURE_ENV,GL_SOURCE1_RGB_ARB   ,GL_TEXTURE     );
   glTexEnvi (GL_TEXTURE_ENV,GL_OPERAND1_RGB_ARB  ,GL_SRC_COLOR   );
   glTexEnvi (GL_TEXTURE_ENV,GL_SOURCE1_ALPHA_ARB ,GL_TEXTURE     );
   glTexEnvi (GL_TEXTURE_ENV,GL_OPERAND1_ALPHA_ARB,GL_SRC_ALPHA   );

   glTexEnvi (GL_TEXTURE_ENV,GL_SOURCE2_RGB_ARB   ,GL_PREVIOUS_ARB);
   glTexEnvi (GL_TEXTURE_ENV,GL_OPERAND2_RGB_ARB  ,GL_SRC_ALPHA   );

   glBegin(GL_TRIANGLE_STRIP);
     glNormal3f          (0,1,0   );
     glMultiTexCoord2fARB(GL_TEXTURE0_ARB,co,cz);
     glMultiTexCoord2fARB(GL_TEXTURE1_ARB,co,cz);
     glMultiTexCoord2fARB(GL_TEXTURE2_ARB,co,cz);
     glVertex3f          (x1,y1,z1);

     glNormal3f          (0,1,0   );
     glMultiTexCoord2fARB(GL_TEXTURE0_ARB,cz,cz);
     glMultiTexCoord2fARB(GL_TEXTURE1_ARB,cz,cz);
     glMultiTexCoord2fARB(GL_TEXTURE2_ARB,cz,cz);
     glVertex3f          (x2,y2,z2);

     glNormal3f          (0,1,0   );
     glMultiTexCoord2fARB(GL_TEXTURE0_ARB,co,co);
     glMultiTexCoord2fARB(GL_TEXTURE1_ARB,co,co);
     glMultiTexCoord2fARB(GL_TEXTURE2_ARB,co,co);
     glVertex3f          (x3,y3,z3);

     glNormal3f          (0,1,0   );
     glMultiTexCoord2fARB(GL_TEXTURE0_ARB,cz,co);
     glMultiTexCoord2fARB(GL_TEXTURE1_ARB,cz,co);
     glMultiTexCoord2fARB(GL_TEXTURE2_ARB,cz,co);
     glVertex3f          (x4,y4,z4);
   glEnd ;
 glPopAttrib ;
end ;


Еще раз, спасибо! :))


 
Trimp ©   (2006-07-25 19:16) [42]

Всё понял.  


> что маску легче сделать с альфой

Про это забыл написать.

Удачи! :))


 
имя   (2007-03-14 08:11) [43]

Удалено модератором


 
имя   (2007-03-21 20:25) [44]

Удалено модератором



Страницы: 1 2 вся ветка

Текущий архив: 2008.09.14;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.025 c
4-1196408923
serg128
2007-11-30 10:48
2008.09.14
Как определить загрузку процессора?


3-1205489996
Павел Калугин
2008-03-14 13:19
2008.09.14
Грабли с MySql


3-1205998904
denmin
2008-03-20 10:41
2008.09.14
Не постятся данные в PostgreSQL.


2-1217581135
krem
2008-08-01 12:58
2008.09.14
Сохранение файла


2-1217606385
InsanI
2008-08-01 19:59
2008.09.14
Ввод текста в другой программе