|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
|
Выбор стратегии трасировки пространства для создания 3D модели24.05.2018, 18:29. Показов 889. Ответов 6
Метки нет (Все метки)
Вот скажем есть программа в которой генерируется виртуальное пространство с ландшафтом, зданиями, разными объектами.
Требуется с заданным разрешением составить меш (mesh) этого пространства для последующего использования в 3D редакторах и т.п. Из доступных инструментов - только пускать лучи трассировки: - задаем координаты начала луча и его направление и получаем координаты точки куда уперся луч, или узнаем что луч уходит в бесконечность. Гарантируется что мы знаем координаты как минимум одной точки где в виртуальном мире есть непустое пространство. Гарантируется что размеры непустого пространства не бесконечно, но заранее границы не известны. Предполагается что нет далеко отстоящих друг от друга "островков" непустого пространства или такие островки, которые далеко от начальной точки, не будут нам интересны. Поверхности могут быть односторонними - например, сверху поверхность трассировкой детектируется, а снизу - нет. Вопрос же у меня такой: какую стратегию обхода здесь лучше всего применить? пока что придумал что можно делать трассировку вдоль 3D сетки в шести направлениях (верх/низ/слева/справа/спереди/сзади) расширяясь от начальной точки через обход в ширину т.е.: начинаем с трех линий сетки проходящих через известную начальную точку, добавляем их в очередь обработки по два раза чтобы пройти по одной линии в двух направлениях берем непройденную линию сетки, пускаем луч из бесконечности по этой линии, если уперся куда-то, то (а) записываем найденную точку, (б) берем ближайший узел сетки и добавляем в очередь 6 направлений по 3 линиям сетки этого узла если такие направления не были пройдены ранее, (в) запускаем новый луч от ближайшего узла сетки стоящего за найденной точкой вдоль текущего направления, и так пока не уйдем в бесконечность после запуска луча также добавляем в очередь обработки 4 ближайшие луча-соседа по тому же направлению, если такие лучи не были пройдены ранее если луч сразу ушел в бесконечность, то от него соседей не добавляем. Есть еще проблема подбора алгоритма формирования меша по точкам, но пока не буду тут его поднимать - задача вроде бы "типовая" и готовые реализации данного алгоритма, думаю, я смогу найти сам.
0
|
|
| 24.05.2018, 18:29 | |
|
Ответы с готовыми решениями:
6
Какая прога нужна для создания 3D модели машины? Программки для создания 3D модели дома и рассчета кол-ва материалов Выбор стратегии работы с БД |
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||
| 25.05.2018, 10:30 | |||
|
Как вариант: Можно взять визуализацию неявных поверхностей Implicit surface. Все сложные поверхности начальной сцены излучают некое поле электрического заряда, визуализируем это поле полученное одной из кучи формул одним из кучи методов. Формул заряда если погуглить качественно вроде есть штук 15, например тут вроде только 4 http://paulbourke.net/geometry/implicitsurf/ В некоторых формулах что давно попадались можно настройками менять характер поля и финальной формы поверхности. Есть также несколько методов визуализации Implicit surface, наверно самый известный шагающие кубы https://ru.wikipedia.org/wiki/Marching_cubes Мера точности аппроксимации это очевидно размер кубов+будет равномерность плотности аппроксимации треугольниками. Наверно есть куча готовых методов\софтов по оптимизации меша геометрии построенной как Implicit surface.
0
|
|||
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
|||
| 25.05.2018, 12:08 [ТС] | |||
|
У меня есть подозрения что можно залезть в живые кишки OpenGL / Direct3D и попытаться вытащить информацию о мешах оттуда, но тут есть много моментов от, собственно, как это сделать, до моментов типа "если это не видно то этого нет" и уменьшение детализации мешов с расстоянием. Да, детализация при ручной трассировке может пострадать, но это допустимо. Летать камерой не надо, трассировка, запускается самим движком программы, и, как я понял, может быть сделана в любом месте мира не зависимо от отрисовки мира камерой. И я не собираюсь в 3D редактор передавать данные типа сферы из 300к точек. Думаю какой-нибудь готовый алгоритм уменьшения количества вершин меша задействовать. Хотя о самостоятельном написании алгоритма для кучи точек на одном треугольнике я тоже подумывал. Implicit surface - я так понял это уже про генерацию меша по найденным точкам ?
0
|
|||
|
1472 / 827 / 140
Регистрация: 12.10.2013
Сообщений: 5,456
|
|||||
| 25.05.2018, 15:27 | |||||
|
0
|
|||||
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
||||
| 25.05.2018, 18:29 [ТС] | ||||
|
0
|
||||
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
|
| 15.07.2018, 16:09 [ТС] | |
|
Решил усложнить себе жизнь и реализовать через трассировку лучей внутри программы.
Пока в качестве пробы работает следующий алгоритм: пространство виртуально делится на кубы одинакового размера и рассматриваются центры кубов как узлы сетки. процесс начинается из одного выбранного узла, выбираются соседние узлы, включая текущий и диагональные (3*3*3 узлов), из каждого узла строятся лучи трассировки параллельно осям в двух направлениях (2*3) для каждого найденного удара лучом сохраняются координаты удара, ищется ближайший узел сетки, и если это первый удар возле него - аналогичным образом строятся новые лучи Плюсом такого подхода считаю что в таком случае соседние точки будут примерно на одинаковом расстоянии R (шаг сетки) друг от друга и максимальное расстояние между точками не более 2R для соседей крест-накрест, и не более 2.5R (R*√6) для соседей по диагонали. И этот факт можно использовать для упрощения генерации треугольников. Минусом в данной реализации вижу, скорее всего, излишние количество трассировок повторных или дающих очевидно одинаковый результат. Далее идет задача построения треугольников. Я пока не смог найти действительно подходящей реализации алгоритмов для моего случая. Универсальные методы, типа Bowyer–Watson для случая 3D требуют чтобы треугольники были на одной плоскости. А триангуляция Делоне для 3D делает только тетраэдры. Пока что в качестве тестирования использую триангуляция Делоне и выкидываю треугольники у которых длинна сторон больше чем требуется. Работает не очень быстро и результат не идеальный.
0
|
|
|
294 / 265 / 48
Регистрация: 09.04.2013
Сообщений: 1,038
|
|
| 17.07.2018, 22:30 [ТС] | |
|
Как можно переделать подобный алгоритм обхода чтобы он не "перешагивал" через поверхность, а шел только с одной стороны ?
0
|
|
| 17.07.2018, 22:30 | |
|
Помогаю со студенческими работами здесь
7
Выбор в таблице данных модели ссылки на экземпляр связанной модели Выбор стратегии продвижения нового сайта Многопоточность и вычисления: выбор оптимальной стратегии УТ: Выбор стратегии списания товаров пользователем Выбор формата модели для Unity Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|