Estou tentando desenhar texturas alinhadas com esse corpo físico cuja origem do sistema de coordenadas está no centro da tela. (XNA) Spritebatch tem sua origem padrão definida no canto superior esquerdo. Consegui posicionar as texturas corretamente, mas notei que minhas texturas estão invertidas verticalmente. Ou seja, uma textura de seta apontando para cima, quando renderizada aponta para baixo. Não sei ao certo onde estou errado com a matemática.
Minha abordagem é converter tudo em unidades de medidor de física e desenhar de acordo.
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();
onde Paddle :: Draw se parece com:
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);
A matriz de projeção ortográfica parece boa para mim, mas obviamente estou fazendo algo errado em algum lugar! Alguém pode me ajudar a descobrir o que estou fazendo de errado aqui?
obrigado
scale
negativo? Você faz algo especial no sombreador de vértice / pixel para o efeito que está usando (especificamente como você manipula / usa coordenadas de textura?) Além disso, se você estiver usando o XNA4, não deseja passar o efeito para o efeito Chamada Begin () do lote, em vez de tentar invocá-lo manualmente?