如何从源引擎vmf计算笔刷的点

How to calculate the points of a brush from a source engine vmf?

本文关键字:计算 vmf 引擎      更新时间:2023-10-16

我正在尝试使用OpenGL从C++中的源引擎.vmf文件渲染笔刷。

.vmf将实心笔刷存储为一系列平面,我想使用这些平面来计算每个笔刷的点。我确信这将与所有基于Quake引擎的.map文件完全相同。

基本上,笔刷的每个点都是3个平面相交的点。我在stackoverflow上发现了一个与我类似的问题,解释是获得3个平面的单位法线,然后在这个页面上使用等式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)"

我真的不知道从哪里开始,任何帮助都将不胜感激,谢谢。

通常的方法是用平面填充BSP树。有了BSP,可以很容易地执行布尔运算,比如"获取所有这些平面并发出由它们限定的(凸)体积",平面的交点是边,边的交点是点。