请在这里忍受 - 我最终会回答一个问题......
我正在构建一个3D太空游戏,目前正在添加由多个网格构建的空间站(Orbitals)。我似乎遇到的问题是,不同的部分似乎是重叠的,好像它们没有正确地相互抵消。
我有一个超类OrbitalSection,它是子类;每个子类定义有不同数量的OrbitalJunction,每个OrbitalJunction都包含一个Matrix3D对象,用于确定交汇点的位置和方向。
在游戏初始化过程中,初始化轨道选择第一个轨道部分并选择将使用该部分的轨道交叉点。为了确定这个轨道交界的方向,我正在使用......
chosenJunction.matrix.append(chosenSection.matrix);
(OrbitalSection和OrbitalJunction都有一个'矩阵'方法,返回其内部Matrix3D对象)。我将上面返回的Matrix3D方向传递给一个新的随机选择的OrbitalSection上的'connectToJunction'方法。
所以,最后,这是我的问题:
OrbitalSection类中的以下代码是逻辑吗?
public function connectToJunction(p_sourceOrientation:Matrix3D):void {
// _junctions is an Array of OrbitalJunctions...
var chosenJunction:OrbitalJunction = _junctions[Math.floor(Math.random() * _junctions.length)];
var invertedMatrix:Matrix3D = new Matrix3D();
invertedMatrix.copyFrom(chosenJunction.matrix);
invertedMatrix.invert();
// the following lines re-position the inverted, rotated matrix back to the junction's original position...
invertedMatrix.position.x = chosenJunction.matrix.position.x;
invertedMatrix.position.y = chosenJunction.matrix.position.y;
invertedMatrix.position.z = chosenJunction.matrix.position.z;
_offsetMatrix.copyFrom(invertedMatrix); // << this is this OrbitalSection's Matrix3D object that the 'matrix' method returns
_offsetMatrix.append(p_sourceOrientation); // the 'external' orientation is appended to this object's _offsetMatrix because the passed parameter in the Matrix3D .append method is the left-hand-side Matrix3D
}
我的逻辑是,为了让两个交叉点相互“插入”,它们必须在同一个方向上匹配;所以肯定其中一个必须倒置。
理想情况下,应设置新的OrbitalSection的_offsetMatrix(以及任何其他添加的OrbitalSections),以便描述相对于Orbital的0,0,0位置和0,0,0旋转的位置和旋转。
那么,以这种方式反转所选结点的_offsetMatrix是否有意义?
顺便说一下,我将每个OrbitalJunction标记为选中时使用的'使用'; 'used'交汇点被排除在构建过程中可用联结的列表中,因此“重叠”问题并不仅仅是将多个OrbitalSection添加到同一个交叉点 - 即使它在游戏中看起来略微如此。欢呼声。
答案 0 :(得分:0)
我已经找到了问题所在。我需要'翻转'第一个OrbitalSection的轨道连接的Matrix3D(180度)并将其转换为负坐标 - 这将重新定位它,以便另一个交叉点可以“插入”它并重新定位它以便它位于轨道交界处的位置被正确的数量抵消。 然后我需要.inverse()第二个OrbitalJunction的Matrix3D并将其应用到第二个OrbitalSection的Matrix3D。这是必要的,因为OrbitalJunction最多匹配0,0,0转,其包含的OrbitalSection需要旋转,并向相反的方向移动。 以防这对任何想要相对于彼此定位3D对象的人有用......