#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. Я думаю, вы говорите о большой проблеме, а не о сложной. Какой скорости вам нужно достичь? Как быстро вам нужно отсканировать ваши полмиллиона треугольников? Сколько лучей вам на самом деле нужно отбросить?