2011-07-03 8 views
3

ちょっと私はbox2dとSFMLを統合しています.box2Dには、SFMLと同じ奇妙な鏡像のY軸座標系があり、すべてが上下逆さまにレンダリングされています。私が置くことができる機能や短いコードは、単にウィンドウのレンダリング内容を反映していますか?私はこれを支援するために、SF ::ビューで何かを置くことができると思っていSFMLでY軸をミラーリングする

...

私は簡単に体の大きさを、目的のレンダリングもたらすないため、簡単にY軸を反転させることができますどのように/場所?

+0

私は逆のビューを使用する際の問題は、反転した位置だけでなく、すべてのスプライトが上下逆さまにレンダリングされるということです。 – Schnommus

答えて

2

私はBOX2Dされるかわからないが、私はOpenGLを使用してY軸を反転したいとき、私は同じように、射影行列に負のスケーリング係数を適用する:あなたはそれが独立した実行したい場合は

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

openGLの場合、負のx値でsf :: Viewを適用するだけです。

+0

どこに配置すればよいですか?私は何とかsf :: FlipAxis()関数を表示することができますか? – Griffin

+0

レンダリングするオブジェクトを反転する必要があります。私はこれらの2つのプロジェクトをどの程度統合しているのか分かりませんが、SFML :: Drawable(テキスト、図形など)はすべてSetScale関数を持っています。ここで負の係数を設定することができます:Object.SetScale(1.0f、-1.0f)。しかし、あなたがOpenGLを使って自分自身をレンダリングし続けているなら、上記のように設定することができます。上記は、PreserveOpenGLStatesを使用している場合にのみ、SFML :: Drawableでは機能しません。これは、OpenGLを2つの状態に分割するためです(SFMLの場合は1つ、SFMLの場合は1つ)。ただし、この関数はSFML 2.0以降には存在しません。 – Raven

2

あなたのモデルが従来の座標系(正のy点を上に上げる)を使用し、それを画面座標系に変換する必要があります(正のy点を下に)。

座標系をモデルとスクリーン間の変換手動、任意のSF :: Drawableのにモデル/ BOX2D位置データをコピーする場合:

b2Vec2 position = body->GetPosition(); 

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

あなたはラッパークラスや関数でこれを隠すことができますが、それはする必要がありますモデルとレンダラーのあいだをレンダリング変換前の状態にします。 SFMLでそれを設定する場所はありません。

私はBox2Dがあなたが望む座標系を持っていると思います。あなたのモデル(0、-10)に基づいて、画面の代わりに重力ベクトルを設定するだけです。