Russian Qt Forum
Апрель 28, 2024, 22:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Интерполяция по решетке  (Прочитано 4658 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Август 16, 2013, 10:13 »

Добрый день

Вроде задачка несложная, но что-то "не придумывается". Есть 3-мерный массив ячеек a[ x ][ y ][ z ] в котором записаны значения плотности в центре ячейки. Известно положение решетки в пр-ве и размеры ячейки по осям (одинаковы для всех)

Надо: для произвольной точки p(x. y, z) интерполировать значение плотности. Первое что приходит в голову - создать др массив плотностнй в "узлах", а дальше смотреть в какую ячейку попала точка и крутить "trilinear". Но так оно неприятно развесисто получается - и новый массив создавать, и с trilinear париться. Нет ли чего-то половчее?

Спасибо
« Последнее редактирование: Август 16, 2013, 17:37 от Igors » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #1 : Август 17, 2013, 16:29 »

 Тут поговорил с товарищами, и они меня убедили - ничего страшного в trilinear нет, ну длинная формула, но простая. Ok, реализовал. Сейчас др проблема также связанная с интерполяцией.

Узлы решетки бросают тень друг на друга. Для примера свет напрвлен по диагонали, последовательно проходя узлы с индексами (0, 0, 0), (1, 1, 1), (2, 2, 2) и.т.д. Предположим в узле (0, 0, 0) большая плотность, а в остальных почти нулевая. Тогда возникает неприятный эффект резкой/жесткой тени по диагонали. В жизни такого нет - солнце имеет угловой размер, поэтому тень размывается - чем дальше от препятствия, тем больше. Как получить такую размытую освещенность в узлах?
   
Записан
Disa
Гость
« Ответ #2 : Август 21, 2013, 10:05 »

Первое что приходит в голову - размытие с соседними узлами когда большое значение плотности.
Например, Гауссом:
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Август 21, 2013, 10:30 »

Первое что приходит в голову - размытие с соседними узлами когда большое значение плотности.
Например, Гауссом:
Ну хорошо хоть кто-то ответил Улыбающийся Гауссом или нет - детали. Главное - как размывать переменно. Напр точка "в глубине решетки" получает мало света - ее нужно сильно мыть/осреднять. Наоборот, точка фронта может вообше не требовать никакого размытия.
Записан
Disa
Гость
« Ответ #4 : Август 23, 2013, 13:17 »

Цитировать
Напр точка "в глубине решетки" получает мало света - ее нужно сильно мыть/осреднять

Я не уверен насчет скорости работы в реал тайме, но никто не мешает делать ядро свертки размытия функцией с зависимостью от параметра (та же яркость). Пример - тот же гаусс, с разными значениями мат.ожидания, ср.кв. отклонения и размерность матрицы (то есть радиуса размытия). Какие это значения должны быть - эвристический подбор.

Картинка с вики для наглядности
« Последнее редактирование: Август 23, 2013, 14:30 от Disa » Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Август 23, 2013, 15:37 »

Я не уверен насчет скорости работы в реал тайме, но никто не мешает делать ядро свертки размытия функцией с зависимостью от параметра (та же яркость). Пример - тот же гаусс, с разными значениями мат.ожидания, ср.кв. отклонения и размерность матрицы (то есть радиуса размытия). Какие это значения должны быть - эвристический подбор.
"та же яркость" я понял так

- если точка хорошо освещена - размываем/осредняем мало
- если плохо - много. Коэффициенты как-нибудь подберем

Ну это очевидно не проходит, пример: 2 соседние точки, освещены именно так - одна хорошо, др плохо. Однако это за счет жесткости исходных теней. Осреднение должно размыть их примерно одинаково, в резульаье значения освещенности должны выровняться. А в предложенной схеме этого нет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 22.