Как рассчитать точки кисти из исходного движка vmf?

Я пытаюсь визуализировать кисти из файла Source Engine .vmf на C ++, используя OpenGL.

.vmf хранит твердые кисти в виде серии плоскостей, которые я хотел бы использовать для вычисления точек для каждой кисти. Я почти уверен, что это будет сделано точно так же, как и для всех .map файлов на движке Quake.

По сути, каждая точка кисти - это точка пересечения трех плоскостей. Я нашел аналогичный свой вопрос по stackoverflow, и объяснение состоит в том, чтобы получить единичные нормали для трех плоскостей, а затем использовать уравнение 8 на этой странице mathworld.wolfram.com/Plane-PlaneIntersection.html. Моя проблема в том, что я понятия не имею, как это реализовать

Вот код для одинарной 6-сторонней кисти в форме куба:

    "plane" "(0 0 256) (0 256 256) (256 256 256)"
    "plane" "(0 256 0) (0 0 0) (256 0 0)"
    "plane" "(0 0 0) (0 256 0) (0 256 256)"
    "plane" "(256 256 0) (256 0 0) (256 0 256)"
    "plane" "(0 256 0) (256 256 0) (256 256 256)"
    "plane" "(256 0 0) (0 0 0) (0 0 256)"

Я действительно не знаю, с чего начать, любая помощь будет оценена, спасибо.


person Chris528    schedule 29.07.2013    source источник


Ответы (1)


Обычный способ сделать это - заполнить BSP-дерево плоскостями. С установленным BSP довольно легко выполнять логические операции, такие как «взять все эти плоскости и испустить (выпуклый) объем, ограниченный ими», пересечения плоскостей - это ребра, взаимодействие ребер - это точки.

person datenwolf    schedule 29.07.2013
comment
Это объяснение для меня слишком высокий уровень, не могли бы вы объяснить, как это реализовать, более подробно? - person Chris528; 29.07.2013
comment
@ Chris528: Использование BSP-дерева - очевидная вещь, потому что они являются основной структурой данных движков Id Tech, а в их наследии движок Source построен; поэтому, если вы хотите обрабатывать данные, созданные для них, вам следует использовать BSP. Деревья BSP - это структура данных, рекурсивно разделяющая пространство на плоскости. Плоскости вашей кисти используются 3D-движками на основе дерева BSP для формирования реальных объемов. BSP - обширная тема, и я рекомендую это прочитать ftp.sgi.com/other/ bspfaq / faq / bspfaq.txt - person datenwolf; 29.07.2013