Я пытаюсь сделать кисти из движка Source .vmf
файл в C ++, используя OpenGL.
.vmf
сохраняет сплошные кисти в виде ряда плоскостей, которые я хотел бы использовать для вычисления точек для каждой кисти. Я уверен, что это будет сделано точно так же, как и для всех движков Quake. .map
файлы также.
По сути, каждая точка кисти — это точка пересечения трех плоскостей. Я нашел такой же вопрос, что и мой, по stackoverflow, и объяснение состоит в том, чтобы получить единичные нормали для 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)"
Я действительно понятия не имею, с чего начать, любая помощь будет оценена, спасибо.
Обычный способ сделать это — заполнить дерево BSP плоскостями. С установленным BSP довольно легко выполнять булевы операции, такие как «взять все эти плоскости и испустить (выпуклый) объем, ограниченный ими», пересечения плоскостей — это ребра, соприкосновение ребер — это точки.
Других решений пока нет …