|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.08.2010, 20:51 | #1 |
Форумчанин
Регистрация: 25.06.2009
Сообщений: 163
|
Эффекты в OpenGL
Здравствуйте. Подскажите, если кто знает, как делать в OpenGL эффекты при выводе картинки на экран? Это не дублирование темы с эффектами. Просто вот при работе с Canvas'ом это делалось так: брался Bitmap, который должен выводиться на экран, и с ним проводились какие-то действия. Но в OpenGL есть контекст воспроизведения. С ним, как я понимаю, все не так просто.
Одним из таких эффектов, который мне удалось реализовать, используя все имеющиеся у меня знания (знания всего пары функций) - плавный переход в черный цвет. Я просто добавлял glColor3f(); перед рисованием изображения, а параметры у этой функции менял с тем, чтобы они постепенно стремились к 0. Но перехода в белый цвет мне реализовать таким способом не удалось. Есть вариант: взять белую картинку и накладывать ее на экран, постепенно меняя у нее прозрачность. Но как средствами OpenGL менять прозрачность у картинки? Вообще, какие есть функции в OpenGL для реализации таких эффектов? Вот их примерный список: 1. Переход в какой-либо цвет. 2. Переход в черно-белое изображение и обратно. 3. Размытие. 4. Рассеянное освещение. Полагаю, что стандартными функциями тут не отделаешься... |
05.08.2010, 09:12 | #2 | |||
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
В соседней теме про эффекты я уже помнится написал про основные способы. Вам лучше бы использовать спрайт. То есть как-то так:
Пример реализации перехода в белый: Код:
Соответственно для перехода в любой цвет пишите: Код:
Цитата:
Цитата:
Ах да, забыл: Цитата:
Кстати, если вдруг задумаете эффект отображения только с отдельными компонентами цвета(R,G,B), то в большую помощь вам есть процедурка glColorMask.http://faceh0r.narod.ru/doc/m_glColorMask.html
Изобретатель велосипедов
Последний раз редактировалось Selestis; 05.08.2010 в 09:26. |
|||
05.08.2010, 09:23 | #3 | ||
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
Цитата:
Код:
Код:
Код:
Цитата:
Код:
Код:
Делал както три демки с эффектами через шейдеры (черно-белый фильтр, размытие и bloom). Вот тут можно ознакомиться: http://www.programmersforum.ru/showp...6&postcount=43 Последний раз редактировалось Вадим Буренков; 05.08.2010 в 09:26. |
||
05.08.2010, 11:33 | #4 |
Форумчанин
Регистрация: 25.06.2009
Сообщений: 163
|
Спасибо за ответы, я попробую сделать все сообразно вашим советам. Рассеянное освещение... Хм... Ну, как я полагаю, это эффект, добавляющий свечение в тех местах изображения, где уже есть освещаемые участки. Немного непонятное объяснение, но вот что ответил по этому поводу Photoshop (внизу сообщения: 1 - без эффекта, 2 - с ним).
Я специально сделал эффект побольше, чтобы было заметно. Добавлю здесь, что в 3D Max'е этот эффект делается немного по-другому и по-другому он выглядит. Достигается там это за счет размытия и осветления изображения (постобработка). Впринципе, в Photoshop'е изображение тоже предварительно размывается, но на деле выглядит менее объемно. |
05.08.2010, 11:47 | #5 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
В трехмерной графике это называется bloom-эффект или ещё это может быть эффектом HDR, но это труднее.
Сделать можно например так: рендер в текстуру шейдером с отсечением пикселей с недостаточной светимостью, при этом текстуру делать раза в 2 меньше viewport'а, затем наложить на экран (растянуть), получится размытое засветление нужных участков.
Изобретатель велосипедов
Последний раз редактировалось Selestis; 05.08.2010 в 11:52. |
05.08.2010, 12:25 | #6 |
Участник клуба
Регистрация: 06.03.2009
Сообщений: 1,346
|
|
05.08.2010, 12:28 | #7 | |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Цитата:
Изобретатель велосипедов
|
|
06.08.2010, 16:23 | #8 |
Форумчанин
Регистрация: 25.06.2009
Сообщений: 163
|
Вот такой вопрос еще возник. При использовании этого кода:
Код:
Alpha - переменная, которая при загрузке программы принимает значение 1, а далее, в таймере - Alpha := Alpha - 0.01. Вообще вот весь код таймера: Код:
Код:
|
06.08.2010, 16:29 | #9 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
У Quads не указан цвет отрисовывающегося примитива, поэтому когда цвет альфы достигает нуля ВСЕ объекты становятся абсолютно прозрачными и мы видим черный фон. Добавьте в квады определение цвета.
P.S. Не факт что я прав, но мне кажется это может быть причиной
Изобретатель велосипедов
|
06.08.2010, 17:35 | #10 |
Форумчанин
Регистрация: 25.06.2009
Сообщений: 163
|
Да, спасибо, именно это и было проблемой.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Визуальные эффекты в программе | SKS | Мультимедиа в Delphi | 12 | 19.01.2011 08:31 |
Эффекты к имиджу | Marsik | Помощь студентам | 31 | 08.01.2010 16:45 |
Эффекты окон | BOBAH13 | Мультимедиа в Delphi | 1 | 03.10.2008 08:49 |
Эффекты картинок | Andrey1433 | PHP | 1 | 17.03.2008 02:07 |
Визуальные эффекты... | ~N@um~ | Помощь студентам | 2 | 11.12.2007 11:15 |