Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 Matrix3D偏移量添加不正确_Actionscript 3_Matrix_3d_Stage3d - Fatal编程技术网

Actionscript 3 Matrix3D偏移量添加不正确

Actionscript 3 Matrix3D偏移量添加不正确,actionscript-3,matrix,3d,stage3d,Actionscript 3,Matrix,3d,Stage3d,请容忍我在这里-我最终会得到一个问题 我正在制作一个3D空间游戏,目前正在添加由多个网格组成的空间站(轨道)。我似乎遇到的问题是,不同的部分似乎是重叠的,好像它们没有正确地相互偏移 我有一个超类OrbitalSection,它是子类;每个子类都定义了不同数量的OrbitalJunction,每个都包含一个Matrix3D对象,用于确定连接的位置和方向 在游戏初始化过程中,初始化轨道选择第一个轨道部分,并选择该部分的轨道连接将被使用。为了确定这个轨道连接的方向,我使用 chosenJunction

请容忍我在这里-我最终会得到一个问题

我正在制作一个3D空间游戏,目前正在添加由多个网格组成的空间站(轨道)。我似乎遇到的问题是,不同的部分似乎是重叠的,好像它们没有正确地相互偏移

我有一个超类OrbitalSection,它是子类;每个子类都定义了不同数量的OrbitalJunction,每个都包含一个Matrix3D对象,用于确定连接的位置和方向

在游戏初始化过程中,初始化轨道选择第一个轨道部分,并选择该部分的轨道连接将被使用。为了确定这个轨道连接的方向,我使用

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度,并将其转换为相反的位置坐标。我将在整个游戏中稍后对其进行测试-希望这会起作用。。。