2011-07-03 75 views
3

嘿所以我整合了box2d和SFML,box2D和SFML具有相同的鏡像Y軸座標系,這意味着所有東西都是顛倒的。是否有某種函數或我可以放入的少量代碼簡單地反映窗口的呈現內容?在SFML中鏡像Y軸

我想我可以把東西在SF ::以幫助這個...

我怎麼能輕鬆方便地翻轉Y軸,用於渲染的目的,不影響主體尺寸/地點?

+0

我認爲使用反向視圖的問題是,所有的精靈也會呈現顛倒,而不僅僅是倒立的位置...... – Schnommus

回答

2

我不知道什麼是Box2D的,但是當我想用openGL Y軸翻轉,我只是施加的負比例因子投影矩陣,如:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 
glScalef(1.0f, -1.0f, 1.0f); 

如果你想這樣做獨立的OpenGL只需應用一個sf :: View與一個負x值。

+0

我會在哪裏放置這個?我可以以某種方式使用它的sf :: view FlipAxis()函數嗎? – Griffin

+0

您必須翻轉渲染的對象。我不知道你整合這兩個項目有多遠,但是每個SFML :: Drawable(等等,Text,Shape,...)都有SetScale函數。你可以在這裏設置負面因素:Object.SetScale(1.0f,-1.0f)。但是,如果你通過opengl維持自己的渲染效果,你可以像上面提到的那樣設置它。如果您使用的是PreserveOpenGLStates,以上方法對於SFML :: Drawable不起作用,因爲它將openGL分成2個狀態,一個爲您,另一個爲SFML。然而,自SFML 2.0以來,該功能缺失。 – Raven

2

這聽起來像你的模型使用傳統的座標系(正y指向上),並且你需要將它轉換爲屏幕座標系(正y向下)。

當複製模型/ Box2D的位置數據到任何SF ::繪製對象,手動模式和屏幕座標系之間的變換:

b2Vec2 position = body->GetPosition(); 

sprite.SetPosition(position.x, window.GetHeight() - position.y) 

您可以在包裝類或函數隱藏這一點,但它需要作爲預渲染變換坐在模型和渲染器之間。我沒有看到在SFML中設置的地方。

我覺得Box2D有你想要的座標系;只需根據您的模型(0,-10)而不是屏幕設置重力矢量。