Sto cercando di disegnare trame allineate con questo corpo fisico la cui origine del sistema di coordinate è al centro dello schermo. (XNA) Spritebatch ha la sua origine predefinita impostata nell'angolo in alto a sinistra. Le trame sono state posizionate correttamente, ma ho notato che le mie trame sono invertite verticalmente. Cioè, una trama di freccia rivolta verso l'alto, quando viene eseguito il rendering verso il basso. Non sono sicuro di dove vada storto con la matematica.
Il mio approccio è convertire tutto in unità di misura del fisico e disegnare di conseguenza.
Matrix proj = Matrix.CreateOrthographic(scale * graphics.GraphicsDevice.Viewport.AspectRatio, scale, 0, 1);
Matrix view = Matrix.Identity;
effect.World = Matrix.Identity;
effect.View = view;
effect.Projection = proj;
effect.TextureEnabled = true;
effect.VertexColorEnabled = true;
effect.Techniques[0].Passes[0].Apply();
SpriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend, null, DepthStencilState.Default, RasterizerState.CullNone, effect);
m_Paddles[1].Draw(gameTime);
SpriteBatch.End();
dove Paddle :: Draw assomiglia a:
SpriteBatch.Draw(paddleTexture,
mBody.Position,
null,
Color.White,
0f,
new Vector2(16f, 16f), // origin of the texture
0.1875f, SpriteEffects.None, // width of box is 3*2 = 6 meters. texture is 32 pixels wide. to make it 6 meters wide in world space: 6/32 = 0.1875f
0);
La matrice di proiezione ortografica mi sembra a posto, ma ovviamente sto facendo qualcosa di sbagliato da qualche parte! Qualcuno può aiutarmi a capire cosa sto facendo di sbagliato qui?
Grazie
scale
negativo? Fai qualcosa di speciale nel vertex / pixel shader per l'effetto che stai utilizzando (in particolare come manipoli / usi le coordinate della trama?) Inoltre, se stai usando XNA4, non vuoi passare l'effetto al Begin () call del batch, piuttosto che tentare di invocarlo manualmente?