Форум: "Игры";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
Внизблендинг текстур по маске Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.054 c