![]() |
Модераторы: Rickert, Alexeis, BorisVorontsov |
![]() ![]() ![]() |
|
Math7244 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.2.2008 Где: Deeptown Репутация: нет Всего: нет |
Здравствуйте.
![]() Написано в книге следующее:
Могли бы вы обьяснить почему при смешивании иногда используется функция glDepthMask? Особенно когда на сцене есть как прозрачные, так и непрозрачные обьекты. Знаю что функцию можно использовать для отключения/включения записи в буфер глубины. Но для чего это нужно при смешивании? Спасибо. Это сообщение отредактировал(а) Math7244 - 2.3.2008, 22:00 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
Буфер глубины используется для правильного отсечения дальних граней ближними. Грани обычно выводятся в произвольном порядке: дальняя грань может быть выведена после более ближней, которая её (частично) заслоняет.
Непрозрачные объекты оставляют свой след в буфере глубины. Это позволяет отсекать дальние грани, заслоняемые ближними, которые уже были выведены. Прозрачные объекты участвуют в тестировании буфера (если часть прозрачного объекта заслонена непрозрачным, она не выводится). Но прозрачные не должны оставлять след в буфере глубины, что бы дальние прозрачные объекты не отсекались ближними, уже выведенными, а производилось смешивание. Добавлено @ 23:43 попробуй выводить три таких кубика в разном порядке, включая и выключая запись в буфер глубины для прозрачных объектов (дальний - непрозрачный)
Это сообщение отредактировал(а) baldina - 2.3.2008, 23:45 |
|||
|
||||
Math7244 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.2.2008 Где: Deeptown Репутация: нет Всего: нет |
Спасибо за помощь.
![]() Но тогда выходит что порядок вывода непрозрачных обьектов станет критичен. А координата глубины будет важна лишь для определения находится ли прозрачный обьект за/перед ближайшим к камере непрозрачным обьектом. Верно ли я понял? Если верно, то получается что из разных положений камеры смешивание должно пройти одинаково. Что и вижу на примере, когда в gluLookAt "смотрю" с обратной стороны. Ведь это не совсем реалистично.
Это сообщение отредактировал(а) Math7244 - 3.3.2008, 18:25 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
Ну вобщем да. В том смысле, что вначале выводятся все непрозрачные (в любом порядке), потом - прозрачные. Для более реалистичного вывода требуется, что бы прозрачные объекты выводились от дальнего к ближнему. Добавлено через 1 минуту и 29 секунд Это касается именно glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); т.к. формула несимметрична. |
|||
|
||||
Math7244 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.2.2008 Где: Deeptown Репутация: нет Всего: нет |
||||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: нет Всего: 101 |
на каждом кадре определять.
или можно попробовать stencil buffer приспособить, выводя в несколько проходов. сам такое не пробовал, так что детали с ходу не расскажу, тут подумать надо |
|||
|
||||
Math7244 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 4.2.2008 Где: Deeptown Репутация: нет Всего: нет |
Ок. Спасибо что прояснил эти детали со смешиванием...
Поставить плюсик увы не смогу, потому что не хватает постов. ![]() |
|||
|
||||
![]() ![]() ![]() |
Вы можете найти полезным что... | |
|
|
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |