Виртуальная триангуляция21.09.2017, 11:31. Показов 2100. Ответов 25
Метки нет (Все метки)
Здравствуйте
Есть 3D модель(и) состоящая (для простоты) только из треугольников. Есть значения освещенности в каждом из 3 вертексов каждого тр-ка. На рендере в каждой точке поверхности освещенность рассчитывается интерполяцией значений в вертексах. Когда тр-ки "достаточно малы" - все хорошо, но вот когда велики - плохо. Очевидное решение "давайте разобьем все большие тр-ки на достаточно мелкие" ведет к быстрому исчерпанию ресурсов. Нужно создавать новые вертексы, а они имеют кучу всего (до десятка атрибутов). Нужно построить такую структуру данных которая бы обеспечивала интерполяцию освещенности с заданным (достаточно малым) шагом. Понятно что все равно придется создавать (виртуальные) тр-ки и вертексы, но они должны хранить лишь минимум данных (желательно только саму освещенность). Псевдокод интерполяции для тр-ка
Игорь
0
|
||||||
| 21.09.2017, 11:31 | |
|
Ответы с готовыми решениями:
25
Триангуляция области по данным SRTM |
|
Айлурофил
|
|
| 24.09.2017, 16:11 | |
|
Не совсем понятно - не проводить триангуляцию, но проводить триангуляцию. Чем одна триангуляция от другой (виртуальной) должна отличаться? Сформулируйте почётче.
0
|
|
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|
| 24.09.2017, 16:45 | |
|
Наверно это методы пространственной интерполяции.
Учитывать N вершин в неком радиусе от точки поверхности + нелинейная функция веса каждой от расстояния. Может играть с формой этой функции задать ее некой редактируемой кривой и смотреть на результаты. Этих методов наверно целая куча в геодезии и в них черт ногу сломит. https://desktop.arcgis.com/ru/... -works.htm
0
|
|
| 25.09.2017, 07:26 [ТС] | ||
|
- обычная триангуляция, напр есть тр-к, рекурсивно разбиваем его на 2 новых. В точке разбиения создаем новый вертекс. Он имеет позицию (3 double), нормаль (3 float) + ....+ (еще много чего) + наконец сама освещенность (8 байт). Ну и сами новые тр-ки (индексы) тоже надо хранить. Все работает, но зачем мы храним кучу всего если на шейдинге нужна только освещенность? Но "просто так" мы не можем хранить только ее - ведь нужны позиция и нормаль чтобы ее посчитать. Это часто называют "baking" (запекание)
0
|
||
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
||
| 25.09.2017, 07:30 | ||
|
0
|
||
| 25.09.2017, 08:28 [ТС] | ||
|
0
|
||
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
|
| 25.09.2017, 08:59 | |
|
Igor3D, А почему нельзя интерполировать по эти коэффициентам (alpha и betta) саму позицию и/или нормаль и вычислять уже по ним освещенность в точке?
0
|
|
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
|
| 25.09.2017, 09:29 | |
|
Igor3D, то есть задачу можно сформулировать так: для каждого треугольника хранить набор заранее вычисленных в некоторых его точках значений освещенности, которые в дальнейшем использовать для интерполяции освещенности произвольной точки внутри этого треугольника? Я правильно понимаю?
0
|
|
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
|
| 25.09.2017, 14:33 | |
|
Igor3D, если доступны двумерные координаты вершин (параметры поверхности, текстурные координаты) я бы попытался просчитанные заранее данные (нормали, освещенности) записать в двумерный массив по типу текстуры, потом по alpha и betta получал двумерную текстурную координату и из массива доставал по этому адресу. На мой взгляд, это самое быстрое, что можно сделать.
0
|
|
| 25.09.2017, 15:05 [ТС] | ||
|
- находим наибольшую сторону тр-ка и создаем новый вертекс на ее середине. Записываем: 1) индекс стороны (2 бита) 2) индекс созданного вертекса (4 байта) 3) саму освещенность (8 байт) Итого всего 13 байт - неплохо. Имея эти данные (+ конечно исходный тр-к) мы можем восстановить как позицию и нормаль (для просчета освещенности), так и найти 2 новых тр-ка. Правда это всего одно разбиение, а их может потребоваться куда больше - неясно как организовать данные. Да и с alpha/beta надо что-то делать на интерполяции Вот (примерно) такие вещи я хотел бы пообсуждать
0
|
||
|
Айлурофил
|
|
| 25.09.2017, 17:24 | |
|
До конца всё равно не понял.
Допустим, у нас есть "большой" треугольник, и значения освещённости в каждой его вершине. Понятно, что он в 3-хмерном пространстве, но разбивать его мы будем всё равно ведь в его плоскости? Нам надо разбить его так, чтобы мы получили значения освещённости в промежуточных точках, правильно? Почему нельзя это сделать "на лету"? Там линейная функция, никаких сложных вычислений. Или даже эти простые вычисления будут тормозить? Если всё же требуется создать массив значений, посчитанных заранее, то почему бы не сделать это "по сетке"? Это будет равномерней. Если так уж нужны именно треугольники, то можно после этого провести триангуляцию Делоне (хотя, это может быть неприемлемо долго).
0
|
|
| 26.09.2017, 08:19 [ТС] | ||||||
|
- Точка попадает в квадрат сетки, есть 4 угла, одни внутри исходного тр-ка, другие снаружи (освещенность в них вообще неизвестна). Ваши действия? - Интерполировать по 4 далеко не так приятно как по 3. - Размер массива промежуточных точек по меньшей мере вдвое больше используемого - И, может самое главное, нет расширяемости, "constrain" не воткнуть.
0
|
||||||
|
Айлурофил
|
||
| 26.09.2017, 15:21 | ||
0
|
||
|
Айлурофил
|
|
| 26.09.2017, 15:29 | |
|
Есть ещё такие варианты (один из них вы сами предложили) , но по сетке, мне кажется, лучше.
0
|
|
|
Айлурофил
|
||
| 26.09.2017, 15:36 | ||
|
Хотя, возможно, я чего-то и не понял из ваших объяснений. Тогда разъясните.
0
|
||
| 27.09.2017, 09:33 [ТС] | ||
|
Вопрос (проблема, тема) в другом - как это хранить и использовать? Напр рендер знает/видит только исходный (регулярный) тр-к, как найти в какой из созданных (виртуальных) мы попали?
0
|
||
|
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
|
||
| 27.09.2017, 12:41 | ||
|
Единственный способ - строить триангуляцию так, чтобы по альфа и бета легко находился треугольник которому принадлежит точка (что-то вроде аналог разбиения по осям на плоскости), но что-то я не соображу как это в барицентрических координатах будет выглядеть. Наверное, разбивать отрезками параллельными сторонам треугольника как на одном из рисунков выше.
0
|
||
| 27.09.2017, 12:41 | |
|
Помогаю со студенческими работами здесь
20
Триангуляция Триангуляция 3D Триангуляция Триангуляция Триангуляция области Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|