библиотека для трассировки лучей (пересечения лучей) на 3D-полигональной модели

#opengl #3d #intersection #trace #raytracing

#opengl #3D #пересечение #трассировка #трассировка лучей

Вопрос:

Я хочу смоделировать лазерный сканер, который излучает лазерный луч на 3D-модель для измерения расстояния или других характеристик модели. 3D-модель состоит из вершин в координате xyz и граней; каждая вершина также имеет некоторые пользовательские функции.

Метод должен быть простым. Я определяю точку обзора и вектор обзора (т. Е. лазерный луч); что мне нужно сделать, это проверить первую вершину или первую грань, которая пересекается с вектором обзора, затем я могу измерить расстояние и оценить объект из ближайших вершин.

Есть ли какая-либо доступная библиотека или инструменты для этого?

Ответ №1:

То, о чем вы говорите, в самом буквальном смысле — это трассировка лучей. Математика и код, лежащие в основе этого, не особенно сложны, особенно если вам не нужно учитывать отражения. Здесь есть руководство по выполнению именно этого на C ; пересечение треугольников почти такое же простое, как пересечение сфер, и вы можете полностью игнорировать свойства поверхности. Если вы не хотите писать свой собственный код (но если серьезно, это, возможно, сотня строк, чтобы сделать то, что вы ищете), есть подсказка о том, как заставить Povray делать то, что вам нужно <a rel="noreferrer noopener nofollow" href="https:///news.povray.org/povray.advanced-users/thread//» rel=»nofollow»>здесь.

РЕДАКТИРОВАТЬ: Больше математики, включая пересечение треугольников, здесь.

Комментарии:

1. спасибо, кстати, я хотел бы попробовать [bullet] (www.bulletphysics.com /) также.

2. Это вааааай перебор. Хотя вы, вероятно, могли бы найти способ сделать это в Bullet, на самом деле она предназначена для решения совершенно другой проблемы.

3. я понимаю. Мне нужно иметь дело с сетками почти с миллионом вершин. Было бы непрактично реализовывать приведение лучей самостоятельно.

4. Я думаю, вы говорите о большой проблеме, а не о сложной. Какой скорости вам нужно достичь? Как быстро вам нужно отсканировать ваши полмиллиона треугольников? Сколько лучей вам на самом деле нужно отбросить?