Конференция "Игры" » OpenGL текстура + alpha канал [Delphi, Kylix, C++ Builder, JBuilder, Windows, Linux]
 
  • anton777 (01.03.09 15:50) [0]
    полно примеров по OpenGL с текстурами, но нету с альфа каналом((

    точнее они есть, но совсем не те что надо.
    а нужен самый простой КЛАССИЧЕСКИЙ так сказать пример.
    тоесть есть RGB(сам цвет) + четвертый байт A(альфа).
    как я понимаю
    A=255 => RGB=100%(тоесть посностью закрывает в этом пикселе задний фон)
    A=0    => RGB=0% (полностью позрачный)
    A=128 => RGB=50%(вот тут я уже начинаю как это все должно сумироваться).

    да, да я даже догадываюсь что вы сейчас скажите ;) => glBlendFunc.
    да я ее смотрел честно говоря за последние пару дней вообще запутался как это работает она и подобные ей.
    вообще что мне конкретно надо: если RGB(255,255,255) А(0) то не рисовать вообще ничего.
    максимум что получалось так RGB(0,0,0) А(0) =>0%
    тоесть если в альфе канале 0 то в картинке должна быть "дырка".
    как я понимаю тут надо правильно сделать инициализвцию OpenGL, правильно загрузить текстуру с Альфой и правильно включить режим смешивания.
    но как я говорил в сети полно примеров со всякими "фичами" с прозрачностью а нужного такого простого нет.
    да статей тоже полно где вроде все просто описывается (опять про "фишки" "кульнве" с альфой) .

    Спасайте ((
  • @!!ex © (01.03.09 21:00) [1]
    Вот что бывает, когда графикой занимаешься не понимая математики... Что греха таить, сам такой был.

    Если нужна просто дырка, то блендинг не нужен.
    Достаточно альфа теста:
    glEnable(GL_ALPHA_TEST);
    glAlphaFunc(GL_GREATER,0.0);

    Блендинг нужен, когда нужны градации прозрачности.

    В качестве загрузки текстур рекомендую использовать TGA. Крайне простой формат(если игнорировать сжатие и индексные цвета), поддерживающий альфу.
  • tButton © (07.04.09 09:52) [2]
    Извините, что вмешиваюсь, но не подскажете ли нормальный редактор позволяющий работать с ТГА и альфой?
    Или хотя бы конвертировать ПНГ в ТГА
  • @!!ex © (07.04.09 10:24) [3]
    > [2] tButton ©   (07.04.09 09:52)

    GIMP
  • akelth (27.05.09 14:50) [4]










































































  • V@s_!s_D@s © (03.05.10 14:51) [5]

    > Блендинг нужен, когда нужны градации прозрачности.


    > Если нужна просто дырка, то блендинг не нужен.
    > Достаточно альфа теста:
    > glEnable(GL_ALPHA_TEST);
    > glAlphaFunc(GL_GREATER,0.0);


    Так, а я не понял, куда это нужно будет вставлять, и что получится, если посмотреть там на тыльную сторону Этой дырки.
  • @!!ex © (03.05.10 15:18) [6]
    в код
  • V@s_!s_D@s © (03.05.10 16:34) [7]
    Я Бурно смеюсь). Конкретно куда
    Я вот этой функции не знаю :glAlphaFunc(GL_GREATER,0.0);
    Не было в учебнике. Вы не могли бы мне разъяснить?
  • @!!ex © (03.05.10 19:13) [8]
  • V@s_!s_D@s © (04.05.10 00:47) [9]
    благодарю - дейсвительно это логично
  • V@s_!s_D@s © (08.05.10 17:02) [10]
    Теперь у меня вопрос - чем это отличается от буфера трафарета? glEnabie(GL_STENCIL_TEST)
    как я понимаю, результат один -дырка.
  • @!!ex © (08.05.10 17:12) [11]
    Тем что это НЕ буффер трафарета. Вопроса глупее не слышал.
    Рекомендую всеже ознакомится с матчастью, прежде чем задавать вопросы.
    Судя по всему, пока вы не поймете как работает графика - будете фигней страдать.
  • V@s_!s_D@s © (08.05.10 17:38) [12]
    .
    > Тем что это НЕ буффер трафарета

    Это то я как раз понимаю
    Я имел в виду "если результат одинаков, то следует искать более динамичный вариант". Как я понимаю, сдесь будет проще использовать именно трафарет.
    Ведь трафарет можно перезаполнять быстрее, чем пересоздавать текстуру + альфа канал к ней
  • @!!ex © (08.05.10 17:46) [13]
    Вы явно не понимаете о чем говорите.
    Еще раз:

    > Судя по всему, пока вы не поймете как работает графика -
    > будете фигней страдать.
  • V@s_!s_D@s © (08.05.10 18:20) [14]
    Подождите-ка.
    Давай те ка разберёмся. Признаюсь, Были проблемы с блендфунк, Но раз на практике они исправлены, то и в теории ничего не понимать я не могу.
    (Горячая дискуссия начинается :) ).
    Мы имеем входную текстуру, ну там примитив. Он имеет какое либо значение альфа, которое сравнивается с заданым функцией, после чего прошедшие тест части примитива отображаются. Я это правильно понимаю?
  • V@s_!s_D@s © (08.05.10 18:24) [15]
    Соответственно этот примитив(текстуру) нужно создать заново, в случае, если мы хотим поменять прозрачные оьбласти.
  • V@s_!s_D@s © (08.05.10 18:24) [16]
    тоесть переназначить альфу
  • V@s_!s_D@s © (08.05.10 18:29) [17]
    Я имел в виду вызов глтекстуре2д с предыдущим текстуре[x,y,3]:=f;
  • V@s_!s_D@s © (08.05.10 19:03) [18]
    буфер же трафарета , как мне кажется будет здесь более уместен именно потому, что он как я понимаю, представляет лишь маску, массив, который по определению переназначать быстрее, а не полупрозрачную текстуру.

    Кстатьи прошу простить меня за возможную неграмотность в данном вопросе и пожалуйста поподробнее разьяснить мне мои заблуждения. Боюсь как бы мне не пришлось переучивать эти темы).
  • @!!ex © (08.05.10 19:08) [19]
    Как ты будешь делать дырку с помошью стенсиля?
    Алгоритм по шагам опиши
 
Конференция "Игры" » OpenGL текстура + alpha канал [Delphi, Kylix, C++ Builder, JBuilder, Windows, Linux]
Есть новые Нет новых   [118679   +72][b:0][p:0.002]