![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Читаю-читаю и не понимаю, в чём возникает проблема при рисовании теней? В проекции или в создании "мягких" границ?
Проекция считается относительно легко. Берётся точка источника света, точка на плоскости и нормаль плоскости. И через функцию MakeShadowMatrix() из юнита VectorGeometry проекта GLScene получаем матрицу проекции света. Далее каждый полигон проецируется на плоскость с помощью этой матрицы. Можно даже перемножить матрицу на матрицу проекции на экран и проецировать тень прямо в экранные координаты. С мягкими тенями всё чуть сложнее. Они рисуются обычно либо в несколько проходов, либо для каждого полигона в отдельности. |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:30 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Обрезку можно тоже сделать в экраной области. Допустим отрисовать плоскость на которую проецируем тень и использовать её как маску для тени. Клиппинг по границе экрана в большинстве случаев уже сделан, остаётся только обрезать тень по маске плоскости.
На языке Delphi написать проблем вообще нет, если можешь объяснить алгоритм по-русски )). Меня больше интересуют мягкие тени и способы их быстрого рисования. Может есть какие идеи по этому поводу? |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
А в алгоритме не нужны мягкие тени. и еще вопрос, а какое затенение вы используете на самом объекте?
|
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
[/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:29 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
у меня больше времени уходит на придумку алгоритма
Возможно ты что-то большее знаешь об условиях задачи, в первом посте об использовании масок не сказано ни чего. Причём первое бысторе клипирование можно сделать по прямоугольнику маски (отсеить все полигоны за пределами плоскости), а второе клипирование сделать попиксельно уже по маске (или как ты называешь его "трафарет") А насчёт мягких теней идей нет или здесь только проекционные тени обсуждаются? |
||||
|
|||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:29 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Вот пример теней по описанному мной выше алгоритму (присоединён)
Код показать не могу, его слишком много и он большей частью к тени не относится. Проблема кода #1 нет самозатенения кроме как освещённости по фонгу, #2 алгоритм относительно медленный. Присоединённый файл ( Кол-во скачиваний: 17 ) ![]() |
|||
|
||||
Tanyaata |
|
||||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
нет, как вы закрашиваете(затеняете) видимые границы куба. у них же тоже цвет меняется в зависимости от источника света? есть плоское затенение, затенение по Фону и затенение по Гуро Добавлено через 26 секунд мягких теней мне не надо. в программе Добавлено через 10 минут и 24 секунды все-таки вы используете OpenGL??? Добавлено через 12 минут и 54 секунды
я не заметила этого, не получается, когда нажимаю и кнопок не увидела |
||||
|
|||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:28 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Dimonka2 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 19.3.2009 Репутация: нет Всего: нет |
Я понял, что мы говорим о совершенно разных вещах. Я говорю о тени, а вы говорите об освещении.
Чупакабро, Твою загогулину можно и по фонгу в реальном времени осветить, ничего сильно не ляжет, главное сделать правильный цикл закраски по строкам. Tanyaata, Всё рисуется без всякого ускорения, никакого OpenGL/Direct3D не используется Если нужно просто освещение, то примеров тысячи. Нужно просто нормаль стороны перемножить на направление источника света и взять из результата длину по Z. всё это делается с нуля за 10 минут |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
Ой, простите, открыла первую вашу программу. поэтому и ничего не увидела. А можно узнать какие параграфы вы читаете в Никулине, чтобы начать в теории разбираться
Добавлено через 51 секунду
Мы говорим и о тени и об освещении |
|||
|
||||
Чупакабро |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.2.2007 Репутация: 2 Всего: 4 |
/удалено
Это сообщение отредактировал(а) Чупакабро - 31.5.2009, 21:27 --------------------
Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00459B8B in module 'Project1.exe'. Read of address 0000019C'. Process stopped. Use Step or Run to continue. |
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
начала я его читать, да уж, своеобразный человек и автор. Факты так изложил, что обычные вещи кажутся непонятными и сложными
|
|||
|
||||
Tanyaata |
|
|||
Новичок Профиль Группа: Участник Сообщений: 31 Регистрация: 28.2.2009 Репутация: нет Всего: нет |
А куда все пропали?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |