Модераторы: Snowy, Alexeis, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите написать алгоритм построения теней, алгоритм на Delphi 
V
    Опции темы
Dimonka2
Дата 23.3.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



Читаю-читаю и не понимаю, в чём возникает проблема при рисовании теней? В проекции или в создании "мягких" границ?

Проекция считается относительно легко.  Берётся точка источника света, точка на плоскости и нормаль плоскости. И через функцию MakeShadowMatrix() из юнита VectorGeometry проекта GLScene получаем матрицу проекции света. Далее каждый полигон проецируется на плоскость с помощью этой матрицы. Можно даже перемножить матрицу на матрицу проекции на экран и проецировать тень прямо в экранные координаты.

С мягкими тенями всё чуть сложнее. Они рисуются обычно либо в несколько проходов, либо для каждого полигона в отдельности.
PM MAIL   Вверх
Чупакабро
Дата 23.3.2009, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Dimonka2
Дата 23.3.2009, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



Обрезку можно тоже сделать в экраной области. Допустим отрисовать плоскость на которую проецируем тень и использовать её как маску для тени. Клиппинг по границе экрана в большинстве случаев уже сделан, остаётся только обрезать тень по маске плоскости.

На языке Delphi написать проблем вообще нет, если можешь объяснить алгоритм по-русски )).

Меня больше интересуют мягкие тени и способы их быстрого рисования. Может есть какие идеи по этому поводу?
PM MAIL   Вверх
Tanyaata
Дата 23.3.2009, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.2.2009

Репутация: нет
Всего: нет



А в алгоритме не нужны мягкие тени. и еще вопрос, а какое затенение вы используете на самом объекте?
PM MAIL   Вверх
Чупакабро
Дата 23.3.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Dimonka2
Дата 24.3.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



Цитата(Чупакабро @  23.3.2009,  22:41 Найти цитируемый пост)
Нужно учитывать время на вылавливание ошибок. У меня на это уходит бОльшая часть времени, см. мою подпись))

у меня больше времени уходит на придумку алгоритма


Цитата(Чупакабро @  23.3.2009,  22:41 Найти цитируемый пост)
То есть использовать что-то вроде буфера трафарета? Это нельзя по условию задачи.

Возможно ты что-то большее знаешь об условиях задачи, в первом посте об использовании масок не сказано ни чего. Причём первое бысторе клипирование можно сделать по прямоугольнику маски (отсеить все полигоны за пределами плоскости), а второе клипирование сделать попиксельно уже по маске (или как ты называешь его "трафарет")


А насчёт мягких теней идей нет или здесь только проекционные тени обсуждаются?
PM MAIL   Вверх
Чупакабро
Дата 24.3.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Dimonka2
Дата 25.3.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



Вот пример теней по описанному мной выше алгоритму (присоединён)

Код показать не могу, его слишком много и он большей частью к тени не относится. Проблема кода #1 нет самозатенения кроме как освещённости по фонгу, #2 алгоритм относительно медленный.

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  shadow.jpg 56,94 Kb
PM MAIL   Вверх
Tanyaata
Дата 26.3.2009, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.2.2009

Репутация: нет
Всего: нет



Цитата

В смысле? Как одни грани объекта затеняют другие грани того же объекта?


нет, как вы закрашиваете(затеняете) видимые границы куба. у них же тоже цвет меняется в зависимости от источника света? есть плоское затенение, затенение по Фону и затенение по Гуро

Добавлено через 26 секунд
мягких теней мне не надо. в программе

Добавлено через 10 минут и 24 секунды
все-таки вы используете OpenGL???

Добавлено через 12 минут и 54 секунды
Цитата

Там я понаделал кнопок для тестирования разных геометрических алгоритмов. CTRL+левая кнопка мыши - ввод отрезков, SHIFT+левая кнопка мыши - ввод многоугольников


я не заметила этого, не получается, когда нажимаю и кнопок не увидела
PM MAIL   Вверх
Чупакабро
Дата 26.3.2009, 22:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Dimonka2
Дата 27.3.2009, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 19.3.2009

Репутация: нет
Всего: нет



Я понял, что мы говорим о совершенно разных вещах. Я говорю о тени, а вы говорите об освещении.


Чупакабро
Твою загогулину можно и по фонгу в реальном времени осветить, ничего сильно не ляжет, главное сделать правильный цикл закраски по строкам.


Tanyaata
Всё рисуется без всякого ускорения, никакого OpenGL/Direct3D не используется

Если нужно просто освещение, то примеров тысячи. Нужно просто нормаль стороны перемножить на направление источника света и взять из результата длину по Z. всё это делается с нуля за 10 минут
PM MAIL   Вверх
Tanyaata
Дата 28.3.2009, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.2.2009

Репутация: нет
Всего: нет



Ой, простите, открыла первую вашу программу. поэтому и ничего не увидела. А можно узнать какие параграфы вы читаете в Никулине, чтобы начать в теории разбираться

Добавлено через 51 секунду
Цитата

Я понял, что мы говорим о совершенно разных вещах. Я говорю о тени, а вы говорите об освещении.



Мы говорим и о тени и об освещении

PM MAIL   Вверх
Чупакабро
Дата 28.3.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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.
PM MAIL   Вверх
Tanyaata
Дата 28.3.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.2.2009

Репутация: нет
Всего: нет



начала я его читать, да уж, своеобразный человек и автор. Факты так изложил, что обычные вещи кажутся непонятными и сложными
PM MAIL   Вверх
Tanyaata
Дата 4.4.2009, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 28.2.2009

Репутация: нет
Всего: нет



А куда все пропали?
PM MAIL   Вверх
Страницы: (5) Все 1 2 [3] 4 5 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.1363 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.