J'essaie de dessiner des textures alignées avec ce corps physique dont l'origine du système de coordonnées est au centre de l'écran. (XNA) Spritebatch a son origine par défaut définie dans le coin supérieur gauche. J'ai réussi à positionner correctement les textures, mais j'ai remarqué que mes textures étaient inversées verticalement. Autrement dit, une texture de flèche pointant vers le haut, lorsque le rendu pointe vers le bas. Je ne sais pas où je me trompe avec les mathématiques.
Mon approche est de tout convertir en unités de mesure physique et de dessiner en conséquence.
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();
où Paddle :: Draw ressemble:
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 de projection orthographique me semble bien, mais je fais évidemment quelque chose de mal quelque part! Quelqu'un peut-il m'aider à comprendre ce que je fais mal ici?
Merci
scale
négatif? Faites-vous quelque chose de spécial dans le vertex / pixel shader pour l'effet que vous utilisez (en particulier comment manipulez-vous / utilisez-vous les coordonnées de texture?) De plus, si vous utilisez XNA4, ne voulez-vous pas transmettre l'effet au Commencer () l'appel du lot, plutôt que d'essayer de l'invoquer manuellement?