2013-09-30 94 views
0

請多多包涵在這裏 - 我將最終得到一個問題...的Matrix3D偏移量不增加正常

我建立一個三維空間的遊戲,目前加入空間站(軌道)建立了多個網格的。我似乎遇到的問題是,不同的部分似乎重疊,好像他們沒有正確地偏離彼此。

我有一個超類OrbitalSection,它是子類;每個子類都使用不同數量的OrbitalJunctions定義,每個OrbitalJunctions都包含一個Matrix3D對象,用於確定交叉點的位置和方向。

在遊戲初始化過程中,初始化軌道選擇第一個軌道部分並選擇使用該部分的軌道運算中的哪一個。爲了確定這個OrbitalJunction的方向,我使用...

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 
} 

我的邏輯是,對於2個交叉點'插入'對方,他們必須匹配在同一個方向;所以肯定其中一個必須倒置。

理想情況下,應該設置新的OrbitalSection的_offsetMatrix(和任何其他添加的OrbitalSections),以便它描述相對於軌道0,0,0位置和0,0,0旋轉的位置和旋轉。

那麼,以這種方式反轉選定的結_offsetMatrix是否有意義?

而且,順便說一下,我將每個軌道結點標記爲「已使用」;在構建過程中,'已用'連接點不在可用連接點列表中,因此'重疊'問題不僅僅是一個以上的OrbitalSection被添加到同一個連接點 - 儘管這很像它在遊戲中的外觀。乾杯。

+0

不確定這個問題是否對任何人都感興趣,但爲了以防萬一,我想我可能已經破解了它。當我還反轉第一個結點的Matrix3D時,簡化的測試版本可以正常工作;不是通過使用Matrix3D的「反轉」方法,而是通過旋轉180度並將其轉換爲反向位置座標。我會在完整的遊戲後面測試它 - HOPEfully這會工作... – moosefetcher

回答

0

我已經找到了問題。我需要將第一個OrbitalSection的OrbititalJunction的Matrix3D「翻轉」180度,並將其翻譯爲其負值座標 - 這將重新定向它,以便另一個交匯點可以「插入」它並重新定位它,使其OrbitalJunction內的位置被正確的量所抵消。 然後我需要.inverse()第二個OrbitalJunction的Matrix3D並將其應用到第二個OrbitalSection的Matrix3D。這是必要的,因爲軌道結被匹配到0,0,0旋轉,它的包含OrbitalSection需要被旋轉,並且在相反的方向上移動。 以防萬一這對任何想要相對於彼此定位3D對象的人都是有用的...