Как рассчитать точки кисти из исходного движка vmf?
Я пытаюсь сделать кисти из движка Source .vmf
файл в C++, используя OpenGL.
.vmf
сохраняет сплошные кисти в виде ряда плоскостей, которые я хотел бы использовать для вычисления точек для каждой кисти. Я уверен, что это будет сделано точно так же, как и для всех движков Quake. .map
файлы также.
По сути, каждая точка кисти - это точка пересечения трех плоскостей. Я нашел такой же вопрос, что и у меня, по stackru, и объяснение состоит в том, чтобы получить единичные нормали для 3 плоскостей, а затем использовать уравнение 8 на этой странице mathworld.wolfram.com/Plane-PlaneIntersection.html. Моя проблема в том, что я понятия не имею, как это реализовать
Вот некоторый код для одной шестигранной кубической кисти:
"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)"
Я действительно понятия не имею, с чего начать, любая помощь будет оценена, спасибо.
1 ответ
Обычный способ сделать это - заполнить дерево BSP плоскостями. С BSP на месте довольно легко выполнять булевы операции, такие как "взять все эти плоскости и испустить (выпуклый) объем, ограниченный ими", пересечения плоскостей - это ребра, соприкосновение ребер - это точки.