Сталкнулся с следующей проблемой, имеется трехугольник. В GL очень просто присвоить вершине трехугольника цвет, но как присвоить вершине текстуру, причем не одну, а каждой вершине разную. Объекты рисуются внутри glBegin, вызывать текстуру glBindTexture внутри glBegin нельзя, как быть. Нужно чтобы вершинам трехугольника присваивалить разные текстуры плавно переходя одна в другую. Как это сделать? Или это нереально?
Это нереально... Попробуй рассказать для чего тебе нужно выкрутиться именно так, и может кто-то расскажет как это сделать по другому (более правильно)...
Дело вот в чем, у меня имеютстя кубы из который построены объекты, каждый куб имеет две текстуры и данные о точках, которые отображают вторую текстуру. Так вот когда на одной сторне две точки имеют первую текстуру, а две вторую, между ними наблюдается плавный переход. Как его реализовать? Если смогу выложу картинки. Проблема в реализации плавного перехода от трех вершин к одной, чем тут делать? От двух к двум делать просто. Ой блин подумаешь, ну не любил я "русский язык" никогда в школе =) .
AlexBond Элементарно интерполирование. Вот квадрат 1 соответствует присутствию одной из текстуры 0 отсутствию данной текстуры. Код (Text): (1,0,0,0)-----(0,1,0,0) | * | | | (0,0,0,1)-----(0,0,1,0) Коэффициенты вычисляются интерполированием. Дальше просто полученные коэффициенты (f1,f2,f3,f4) умножаются с текстурами и складываются. A*f1+B*f2+C*f3+D*f4 Для интерполирования применялся следующей метод Inverse distance weighting
Вернулся к этой теме... Это реально, простым glСolor4f, только при случаи, когда текстур две, интерполирование через OpenGL, использовав мультитекстурирование и альфа канал, присвоенный нужным точкам, в итоге имеем следующую схему наложения: Код (Text): glActiveTextureARB(GL_TEXTURE0_ARB ); glEnable (GL_TEXTURE_2D ); glBindTexture (GL_TEXTURE_2D, T1 ); glActiveTextureARB(GL_TEXTURE1_ARB ); glEnable (GL_TEXTURE_2D ); glBindTexture (GL_TEXTURE_2D, T2 ); 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_SOURCE0_RGB_ARB, GL_TEXTURE1_ARB ); glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR ); glTexEnvi ( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE0_ARB ); glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR ); glTexEnvi ( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB, GL_PREVIOUS_ARB ); glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA ); Тем самым будет то, о чем я писал выше, плавный переход, и у точек будут разные текстуры (но проблемы с освещением, оно затирается, но это другая тема). C более чем 2 текстурами такое не проделать... тут только способом выше... ручным интерполированием.