Двойная текстура OpenGL

Тема в разделе "WASM.OpenGL", создана пользователем AlexBond, 2 ноя 2007.

  1. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Сталкнулся с следующей проблемой, имеется трехугольник.
    В GL очень просто присвоить вершине трехугольника цвет, но как присвоить вершине текстуру, причем не одну, а каждой вершине разную. Объекты рисуются внутри glBegin, вызывать текстуру glBindTexture внутри glBegin нельзя, как быть.
    Нужно чтобы вершинам трехугольника присваивалить разные текстуры плавно переходя одна в другую.

    Как это сделать? Или это нереально?
     
  2. Pushkoff

    Pushkoff New Member

    Публикаций:
    0
    Регистрация:
    12 сен 2005
    Сообщения:
    40
    Адрес:
    Донецк
    Это нереально...

    Попробуй рассказать для чего тебе нужно выкрутиться именно так, и может кто-то расскажет как это сделать по другому (более правильно)...
     
  3. keYMax

    keYMax New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2003
    Сообщения:
    276
    Адрес:
    Новоуральск
    "Трехугольник" это что? ) Треугольник?
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    AlexBond
    Смешать три текстуры в одну и выводить одну текстуру.
     
  5. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Дело вот в чем, у меня имеютстя кубы из который построены объекты, каждый куб имеет две текстуры и данные о точках, которые отображают вторую текстуру. Так вот когда на одной сторне две точки имеют первую текстуру, а две вторую, между ними наблюдается плавный переход. Как его реализовать? Если смогу выложу картинки. Проблема в реализации плавного перехода от трех вершин к одной, чем тут делать? От двух к двум делать просто.

    Ой блин подумаешь, ну не любил я "русский язык" никогда в школе =) .
     
  6. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    AlexBond
    Элементарно интерполирование.
    Вот квадрат 1 соответствует присутствию одной из текстуры 0 отсутствию данной текстуры.
    Код (Text):
    1. (1,0,0,0)-----(0,1,0,0)
    2.     |       *     |
    3.     |             |
    4. (0,0,0,1)-----(0,0,1,0)
    Коэффициенты вычисляются интерполированием.
    Дальше просто полученные коэффициенты (f1,f2,f3,f4) умножаются с текстурами и складываются.
    A*f1+B*f2+C*f3+D*f4

    Для интерполирования применялся следующей метод Inverse distance weighting
    [​IMG] [​IMG]
     
  7. AlexBond

    AlexBond Member

    Публикаций:
    0
    Регистрация:
    30 янв 2005
    Сообщения:
    69
    Адрес:
    Belarus
    Вернулся к этой теме...
    Это реально, простым glСolor4f, только при случаи, когда текстур две, интерполирование через OpenGL, использовав мультитекстурирование и альфа канал, присвоенный нужным точкам, в итоге имеем следующую схему наложения:
    Код (Text):
    1.    glActiveTextureARB(GL_TEXTURE0_ARB    );
    2.    glEnable          (GL_TEXTURE_2D      );
    3.    glBindTexture     (GL_TEXTURE_2D, T1  );
    4.  
    5.    glActiveTextureARB(GL_TEXTURE1_ARB    );
    6.    glEnable          (GL_TEXTURE_2D      );
    7.    glBindTexture     (GL_TEXTURE_2D, T2  );
    8.    glTexEnvi         (GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE ,GL_COMBINE_ARB    );
    9.    glTexEnvi         (GL_TEXTURE_ENV,GL_COMBINE_RGB_ARB  ,GL_INTERPOLATE_ARB);
    10.  
    11.     glTexEnvi ( GL_TEXTURE_ENV, GL_SOURCE0_RGB_ARB,  GL_TEXTURE1_ARB );
    12.     glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND0_RGB_ARB, GL_SRC_COLOR    );
    13.  
    14.     glTexEnvi ( GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB,  GL_TEXTURE0_ARB );
    15.     glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_COLOR    );
    16.  
    17.     glTexEnvi ( GL_TEXTURE_ENV, GL_SOURCE2_RGB_ARB,  GL_PREVIOUS_ARB );
    18.     glTexEnvi ( GL_TEXTURE_ENV, GL_OPERAND2_RGB_ARB, GL_SRC_ALPHA    );
    Тем самым будет то, о чем я писал выше, плавный переход, и у точек будут разные текстуры (но проблемы с освещением, оно затирается, но это другая тема).

    [​IMG]

    C более чем 2 текстурами такое не проделать... тут только способом выше... ручным интерполированием.