我正在尝试使用 Java 从 Quake 3 .map 文件构建渲染原始数据。 .map 格式将画笔(形状)信息存储为一系列平面,但我想将它们转换为 (x,y,z) 形式的点。所涉及的数学在这一点上有点超出我的范围,所以有人对我如何做到这一点有什么建议吗?如果需要,我可以使用外部库,但如果可能的话,我宁愿使用我自己的代码。
一些可玩的数据:
Dimensions: 64*64*64
Position: All sides are equidistant from the origin (0,0,0)
Shape: Cube
( 64 64 64 ) ( 64 -64 64 ) ( -64 64 64 )
( 64 64 64 ) ( -64 64 64 ) ( 64 64 -64 )
( 64 64 64 ) ( 64 64 -64 ) ( 64 -64 64 )
( -64 -64 -64 ) ( 64 -64 -64 ) ( -64 64 -64 )
( -64 -64 -64 ) ( -64 -64 64 ) ( 64 -64 -64 )
( -64 -64 -64 ) ( -64 64 -64 ) ( -64 -64 64 )
编辑:
此数据显示的是一个立方体,它有 6 个面。这六个边的每一个都可以存储为一个平面,用三个坐标来表示位置和方向。上述数据的每一行显示一个平面,所有 6 行构成了构成立方体的 6 个平面。
这张图片有助于说明我的观点:Three Points Defining a Plane
点 p1、p2 和 p3 是我在上面的数据中每行给出的值。
Quake 3 引擎必须在编译时整理出飞机的哪些部分要保留,但目前我对此不感兴趣。如果您想了解更多信息,请随时询问!
最佳答案
每当我有这样的问题时,我都会去 Wolfram Mathworld。对于这个问题,试试这个页面: Plane-Plane Intersection
该页上的公式 8 给出了三个平面的交集。要使用它,您首先需要找到平面的单位法线。这很简单:给定平面上的三个点 a、b 和 c(这就是你得到的,对吧?),取(a-b) 和 (a-c) 的叉积得到一个法线,然后除它通过它自己的大小来获得一个单位正常。
关于java - 如何找到三个平面的交点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1386509/