2013-07-02 55 views
2

我正在使用SFML實現分離軸定理衝突,但遇到了我的頂點數組問題。它們正在轉換(包含頂點數組的類繼承了sf :: Transformable),但頂點座標沒有接收到轉換(即旋轉),因此如果對象未處於其原始方向,則碰撞不起作用。我試圖用這樣的獲取SFML中的絕對頂點座標?

length = sqrt(shape1.getShape()[i].position.x*shape1.getShape()[i].position.x + shape1.getShape()[i].position.y*shape1.getShape()[i].position.y); 
    newshape1[i].position.x = length*cos(shape1.getRotation()*(PI/180)); 
    newshape1[i].position.y = length*sin(shape1.getRotation()*(PI/180)); 

兩個形狀的東西被測試計算頂點數組的SAT碰撞之前創建一個新的頂點數組。但是,這似乎並不奏效。我的函數返回發生了碰撞,即使沒有碰撞。我不確定數學是否存在錯誤,但是沒有將SFML轉換應用於對象,它完美地工作。那麼,有什麼我應該做的還是有另一種方法來收集VertexArray信息與轉換(幾乎只是旋轉)應用?

編輯:我在這裏找到了一些信息: http://sfml-dev.org/documentation/2.0/classsf_1_1Transform.php#details 但我在理解如何應用於我的VertexArrays時遇到了一些麻煩。看起來我應該在我的課程內部使用getTransform()做某些事情,並將其與類VertexArray結合使用。

編輯:使用上述信息我嘗試使用這種方法,而不是在VertexArray SAT之前計算的各頂點:

newshape1[i].position = shape1.getTransform().transformPoint(shape1.getShape()[i].position); 

計算點積時否定變換位置之後,它產生完全相同的結果作爲第一次嘗試。

回答

1

我意識到這是一個將近3年的問題,但這個問題一直讓我瘋狂了大概一個星期,而且我終於設法破解它。下面是我工作:

sf::Vector2f vertexPosition = getTransform().transformPoint(m_vertices[n].position); 

...雖然看什麼工作對我來說,你嘗試一下,我真的不知道爲什麼你的做法並不成功。我看到的唯一區別是(1)我從我的自定義形狀中調用此函數,這應該沒有什麼區別,(2)您使用的是GetShape(),我猜測它是一個函數你寫信返回本地頂點位置?

無論如何,我希望這可以幫助未來可能陷入這個問題的人。我上面寫的片段返回任何自定義形狀的頂點的絕對座標以及應用於其上的任何變換(平移,縮放和旋轉)。