我正在尝试使用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引擎必须在编译时整理出飞机的哪些部分,但我现在对此并不感兴趣。如果您想了解更多信息,请随时提出!
答案 0 :(得分:3)
每当我遇到这样的问题时,我都会去Wolfram Mathworld。对于此问题,请尝试以下页面: Plane-Plane Intersection
该页面上的公式8给出了三个平面的交集。要使用它,首先需要找到飞机的单位法线。这很容易:在飞机上给出三点 a , b 和 c (这就是你所拥有的,对吗?), ( a - b )和( a - c )的交叉乘积得到正常,然后除它可以通过它自己的大小来获得正常的单位。