-
полно примеров по 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, правильно загрузить текстуру с Альфой и правильно включить режим смешивания. но как я говорил в сети полно примеров со всякими "фичами" с прозрачностью а нужного такого простого нет. да статей тоже полно где вроде все просто описывается (опять про "фишки" "кульнве" с альфой) .
Спасайте ((
-
Вот что бывает, когда графикой занимаешься не понимая математики... Что греха таить, сам такой был.
Если нужна просто дырка, то блендинг не нужен. Достаточно альфа теста: glEnable(GL_ALPHA_TEST); glAlphaFunc(GL_GREATER,0.0);
Блендинг нужен, когда нужны градации прозрачности.
В качестве загрузки текстур рекомендую использовать TGA. Крайне простой формат(если игнорировать сжатие и индексные цвета), поддерживающий альфу.
-
Извините, что вмешиваюсь, но не подскажете ли нормальный редактор позволяющий работать с ТГА и альфой? Или хотя бы конвертировать ПНГ в ТГА
-
> [2] tButton © (07.04.09 09:52)
GIMP
-
-
> Блендинг нужен, когда нужны градации прозрачности.
> Если нужна просто дырка, то блендинг не нужен. > Достаточно альфа теста: > glEnable(GL_ALPHA_TEST); > glAlphaFunc(GL_GREATER,0.0);
Так, а я не понял, куда это нужно будет вставлять, и что получится, если посмотреть там на тыльную сторону Этой дырки.
-
в код
-
Я Бурно смеюсь). Конкретно куда Я вот этой функции не знаю :glAlphaFunc(GL_GREATER,0.0); Не было в учебнике. Вы не могли бы мне разъяснить?
-
-
благодарю - дейсвительно это логично
-
Теперь у меня вопрос - чем это отличается от буфера трафарета? glEnabie(GL_STENCIL_TEST) как я понимаю, результат один -дырка.
-
Тем что это НЕ буффер трафарета. Вопроса глупее не слышал. Рекомендую всеже ознакомится с матчастью, прежде чем задавать вопросы. Судя по всему, пока вы не поймете как работает графика - будете фигней страдать.
-
. > Тем что это НЕ буффер трафарета
Это то я как раз понимаю Я имел в виду "если результат одинаков, то следует искать более динамичный вариант". Как я понимаю, сдесь будет проще использовать именно трафарет. Ведь трафарет можно перезаполнять быстрее, чем пересоздавать текстуру + альфа канал к ней
-
Вы явно не понимаете о чем говорите. Еще раз:
> Судя по всему, пока вы не поймете как работает графика - > будете фигней страдать.
-
Подождите-ка. Давай те ка разберёмся. Признаюсь, Были проблемы с блендфунк, Но раз на практике они исправлены, то и в теории ничего не понимать я не могу. (Горячая дискуссия начинается :) ). Мы имеем входную текстуру, ну там примитив. Он имеет какое либо значение альфа, которое сравнивается с заданым функцией, после чего прошедшие тест части примитива отображаются. Я это правильно понимаю?
-
Соответственно этот примитив(текстуру) нужно создать заново, в случае, если мы хотим поменять прозрачные оьбласти.
-
тоесть переназначить альфу
-
Я имел в виду вызов глтекстуре2д с предыдущим текстуре[x,y,3]:=f;
-
буфер же трафарета , как мне кажется будет здесь более уместен именно потому, что он как я понимаю, представляет лишь маску, массив, который по определению переназначать быстрее, а не полупрозрачную текстуру.
Кстатьи прошу простить меня за возможную неграмотность в данном вопросе и пожалуйста поподробнее разьяснить мне мои заблуждения. Боюсь как бы мне не пришлось переучивать эти темы).
-
Как ты будешь делать дырку с помошью стенсиля? Алгоритм по шагам опиши
-
Сам его три дня назад начал изучать, Поэтому возможно ошибаюсь, НО: В книге краснова, например рисуется изображение дырки. То есть я так понял, происходит сперва заполнение трафарета, и уже после рисование. Но там у него не очень понятно - использовать можно, благо он даёт исходники, но вот разобратся очень сложно. А вот позавчера нашёл интересную статью Вот ссылка " http://citforum.proc.ru/programming/opengl/opengl_04.shtml" сейчас её подробнейше изучаю - там очень подробно и детально изложен алгоритм. Вот что я понял: (там куб и сфера) сперва рисуем - заполняем трафарет на +1 там где рисуем. glStencilFunc(GL_ALWAYS, 1, 0); glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); auxSolidCube(2.5); Хотя возможно тут я ошибаюсь, но как понимаю данную команду, она рисует примитив, и где рисует, заполняет на +1. Потом ещё также. И местами изменяем это благообразие ещё на +1. потом очищаем буферы все, кроме трафарета (имеем дырявую фигуру, т.е заполненую разными значениями). Потом запрещаем буфер трафарета(не очищаем) и рисуем. потом включаем трафарет и рсуем дырявую фигуру. // разрешаем тест трафарета и рисуем дырявый куб glEnable(GL_STENCIL_TEST); glStencilFunc(GL_EQUAL, 1, 255); glColor3d(1,1,1); auxSolidCube(2.5); Я признаюсь, пробовал только красновскую версию. Так или примерно так было написано в различных найденых мной исходниках. Получается, если в буфере глубины есть изображение етой фигуры, то мы можем рисовать и за ней (я так понял, что буфер глубины не заполняется, ведь изображение там не рисуется). Правда буфер глубины, как я понимаю проверяет все пикселы экрана, а не фигуры, но вот для этой фигуры и будем его включать. или воти чёто тут интересное нашёл -> http://opengl.org.ru/books/open_gl/chapter4.12.html
-
-
Ага, (с праздником победы тебя) то есть ты уже согласен, что так можно делать. Не, вообще есть такая функция трафарета, не помню, как пишется, каюсь, прибавляет +1. и соответственно всю текстуру анализируем на цвет, или ещё как нибудь - не важно. важно, что по какомунибудь шаблону и используем эту функцию. Я её ещё не применял, но думаю сработает. Получается следующее: стенсил труднее алгоритмически, но зато универсальнее, хотя ,согласен, при использовании медленнее. бленд Быстрее при использовании, но не изменяется произвольно, т.е текстуру надо перезадавать, а трафарет к томуже допускает , хотя это я ещё не проверял, но должно быть так, рисование позади себя, а бленд должен рисоватся по порядку.
-
Так НЕЛЬЗЯ делать. Стэнсиль для других вещей предназначен. И то что ты предлагаешь делать убьет производительность и не даст НИКАКИХ преимуществ.
Помойму тебе тупо лень разбираться в том, как делать правлиьно и хорошо, и ты ищешь решение в рамках своего знания(не знания?).
Мой тебе совет: напиши собственный software 3D. Мозги прочищает основательно.
-
|