Actionscript 3 Matrix3D偏移量添加不正确
请容忍我在这里-我最终会得到一个问题 我正在制作一个3D空间游戏,目前正在添加由多个网格组成的空间站(轨道)。我似乎遇到的问题是,不同的部分似乎是重叠的,好像它们没有正确地相互偏移 我有一个超类OrbitalSection,它是子类;每个子类都定义了不同数量的OrbitalJunction,每个都包含一个Matrix3D对象,用于确定连接的位置和方向 在游戏初始化过程中,初始化轨道选择第一个轨道部分,并选择该部分的轨道连接将被使用。为了确定这个轨道连接的方向,我使用Actionscript 3 Matrix3D偏移量添加不正确,actionscript-3,matrix,3d,stage3d,Actionscript 3,Matrix,3d,Stage3d,请容忍我在这里-我最终会得到一个问题 我正在制作一个3D空间游戏,目前正在添加由多个网格组成的空间站(轨道)。我似乎遇到的问题是,不同的部分似乎是重叠的,好像它们没有正确地相互偏移 我有一个超类OrbitalSection,它是子类;每个子类都定义了不同数量的OrbitalJunction,每个都包含一个Matrix3D对象,用于确定连接的位置和方向 在游戏初始化过程中,初始化轨道选择第一个轨道部分,并选择该部分的轨道连接将被使用。为了确定这个轨道连接的方向,我使用 chosenJunction
chosenJunction.matrix.append(chosenSection.matrix);
(OrbitalSection和OrbitalJunction都有一个返回其内部Matrix3D对象的“matrix”方法)。我将上面返回的矩阵3d方向传递到一个新的、随机选择的轨道截面上的“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
}
公共函数connectToJunction(p_sourceOrientation:Matrix3D):无效{
//_结是一组轨道结。。。
var chosenJunction:OrbitalJunction=_junctions[Math.floor(Math.random()*_junctions.length)];
var invertedMatrix:Matrix3D=新的Matrix3D();
反相器矩阵.copyFrom(chosenJunction.matrix);
inversedMatrix.inverse();
//以下几行将反转的旋转矩阵重新定位回连接的原始位置。。。
invertedMatrix.position.x=chosenJunction.matrix.position.x;
invertedMatrix.position.y=chosenJunction.matrix.position.y;
invertedMatrix.position.z=chosenJunction.matrix.position.z;
_offsetMatrix.copyFrom(invertedMatrix);//我已经解决了这个问题。我需要“翻转”第一个轨道部分轨道连接的矩阵3d(180度)并将其转换为负坐标-这将使其重新定向,以便另一个连接可以“插入”到其中,并重新定位,以便其在轨道连接内的位置偏移正确的量。
然后我需要对第二个轨道连接的矩阵x3d求逆()并将其应用于第二个轨道部分的矩阵x3d。这是必要的,为了使轨道连接匹配到0,0,0旋转,其包含的轨道部分需要旋转,并向相反方向移动。
以防万一,这对想要相对定位3D对象的人很有用…不确定这个问题是否有人感兴趣,但以防万一,我想我可能已经破解了它。当我还反转第一个连接点的矩阵3D时,简化的测试版本可以正确工作;不是使用矩阵3D“反转”方法,而是通过旋转将其旋转180度,并将其转换为相反的位置坐标。我将在整个游戏中稍后对其进行测试-希望这会起作用。。。