![]() |
Модераторы: Rickert |
![]() ![]() ![]() |
|
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 8 Всего: 40 |
Часть II - Карта прозрачности.
Что такое карта прозрачности? Это чёрно-белый рисунок, который указывает на то, какие части поверхности должны иметь определённую степень прозрачности. Надо знать, что прозрачности в OpenGL, как таковой - нет. Это просто ещё одна компонента цвета, которая отображает яркость. По другому тут не скажешь. понимание этого определения достигается путём долгих экспериментов. Ладно, без офтопика... Как всё устроено. Всё просто... У нас есть две картинки... Конечно, если вы можете грузить картинки с альфа каналом, то вы без проблем будете обходиться и одной картинкой, главное чтобы вы могли отделить альфа канал от RGB-канала. Сначала мы отображаем поверхность, затем отключаем тест глубины, включаем смешивание, и устанавливаем на выход(GL_DST_COLOR) чёрный цвет(GL_ZERO)(т.е. всё что будет на альфа-карте чёрным цветом - будет отображаться на поверхности, а всё что белым - нет, эта область будет прозрачна), затем накладываем на неё альфа-карту и отображаем поверхность. Это мы нарисовали нашу поверхность, прозрачную там где нам надо. Теперь ещё ведь и наложить саму текстуру следует: устанавливаем в получаемом цвете буфера и источнике единицу(GL_ONE), затем накладываем RGB-картинку, после чего опять рисуем поверхность. После всего этого мы вновь включаем тест глубины и отключаем смешивание цветов. Чтобы осознать как всё происходит надо понимать, как это работает. Вспомните свою основную функцию прорисовки в OpenGL... Какие функции там есть? glClear(), glLoadIdentity(), gluLookAt()... По сути эта функция - это один кадр вашего проекта. Теперь понимаете? В данной функции вы указываете то, как надо отобразить объекты, при чём в это время ничего не происходит, до тех пор, конечно, пока функция не закончится. Потому что по её окончанию, результат будет выведен на экран. Когда мы рисовали поверхности, накладывая на них различные картинки - мы не создавала тем самым несколько поверхностей. Мы их просто рисовали в буфере ОДНОГО кадра. Теперь о смешивании... Функция glBlendFunc()... Если объяснить на пальцах, то мы делаем так: рисуем в буфер кадра всё, что чёрное, а белое отбрасываем... Отбрасываем по средствам смешивания... Ниже я приведу код и вы, я думаю, догоните в чём замес. Код
Маленькая важность отображения объектов, на последок. Дело в том, что, когда мы рисуем такие поверхности, мы отключаем тест глубины, а следовательно, объекты, которые были нарисованы раньше - будут "перекрыты" объектами в отображении которых есть отключение теста глубины, вне зависимости от того, кто расположен ближе к "зрителю". Таким образом можно сделать несложное умозаключение: сначала надо отображать те поверхности(объекты и т.п.), которые используют в своём отображении отключение теста глубины, а потом - все остальные. Благодарю за внимание. ©Gepard aka [ss]3L33T@ Это сообщение отредактировал(а) gepard - 5.6.2005, 06:11 -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
chipset |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 2 Всего: 165 |
В ФАК Ю!
![]() --------------------
|
|||
|
||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 8 Всего: 40 |
![]() -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
gepard, если не сложно, можешь выложить простенький .exe-пример, показывающий результат применения этих карт прозрачностей ?
-------------------- С уважением, г-н Посол. |
|||
|
||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 8 Всего: 40 |
См. аттач.
Серый куб под плоскостью, к которой применена карта прозрачности. Присоединённый файл ( Кол-во скачиваний: 34 ) ![]() -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Хм... Я думал пример пояснит одну вещь, но так и не прояснил... Скорее всего, задаю глупый вопрос:
![]() Когда используется карта прозрачности ?... Чем она лучше простой текстуры с альфа-каналом ? Единственное преимущество я вижу лишь в том, что карта прозрачности может иметь другое разрешение, нежели сама текстура, скорее всего, применяется более меньшего разрешения, типа сделать дырку в земле... Но это ценой двойной прорисовки... Может напишешь в статье, когда она используется, зачем и чем лучше - для таких как я... немного отставших от времени ![]() -------------------- С уважением, г-н Посол. |
|||
|
||||
gepard |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 8 Всего: 40 |
А разниы никакой и нет. Я же писал об этом в статье. Что мол можете и текстуру с альфа каналом юзать
-------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
|||
|
||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Понятно... Ну раз разницы нет, тогда зачем она нужна ?
![]() - два прохода - отключение Z-теста Когда же текстура с альфа-каналом, Z-тест отключать не надо, и рисуется за один проход... PS: Не совсем понятно это:
-------------------- С уважением, г-н Посол. |
|||
|
||||
gepard |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2477 Регистрация: 29.2.2004 Репутация: 8 Всего: 40 |
Верно.
Продемонстрируй. -------------------- Когда начинаются цифровые войны, а траффик разносит моё сознание по бесконечным просторам инета, подобно ветру, разносящему листву по полям, тогда и только тогда я чувствую себя свободным! © Я, Берсерк, что значит - Неистовый. |
||||
|
|||||
p0s0l |
|
|||
![]() Г-н Посол ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3668 Регистрация: 13.7.2003 Где: 58°38' с.ш. 4 9°41' в.д. Репутация: нет Всего: 112 |
Ну... Примерно так, надо только объединить две текстуры в одну с альфа-каналом...
-------------------- С уважением, г-н Посол. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Программирование игр, графики и искуственного интеллекта" | |
|
НА ЗЛОБУ ДНЯ: Дорогие посетители, прошу обратить внимание что новые темы касающиеся новых вопросов создаются кнопкой "Новая тема" а не "Ответить"! Любые оффтопиковые вопросы, заданные в текущих тематических темах будут удалены а их авторы, при рецедиве, забанены.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rickert. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Программирование игр, графики и искусственного интеллекта | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |