Je suis en train d'essayer de comprendre comment fonctionne le rendu 3D dans XNA, il semble être très similaire à DirectX, ce qui le rend assez simple .Dans XNA/WP7, dessiner 2D sur 3D crée un rendu 3D bancal pour moi
Mais il y a un type de comportement auquel je ne m'attendais pas lorsque je dessinais avec des lots de sprites.
Lorsque je viens de dessiner la primitive, un cube en 3D, sans sprites j'obtenir ce résultat: http://i.stack.imgur.com/DQAHg.png
Mais quand je suis en train de tirer sur le dessus de sprites 2D (tirée de SpriteBatch) dans ce qui suit Mode:
SpriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
base.Draw(gameTime);
SpriteBatch.End();
shape.Draw(gameTime);
Ceci est le résultat que je reçois: http://imgur.com/7QZlj
Ce qui est évidemment faux. Ma première pensée était que c'était le rendu utilisant la projection orthographique (pour une raison quelconque) mais je ne suis pas sûr.
Voici le code que j'utilise pour dessiner le cube, il est presque 1: 1 de l'échantillon de primitives XNA (je ne l'ai pas commencé à travailler sur un bon cadre 3D pour le jeu) il peut être salissant
GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise;
// Create camera matrices, making the object spin.
float time = (float)gameTime.TotalGameTime.TotalSeconds;
Vector3 cameraPosition = new Vector3(0, 0, 2.5f);
float aspect = GraphicsDevice.Viewport.AspectRatio;
float yaw = 3.05f;
float pitch = 5.34f;
float roll = 8.396f;
Matrix world = Matrix.CreateFromYawPitchRoll(yaw, pitch, roll);
Matrix view = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up);
Matrix projection = Matrix.CreatePerspectiveFieldOfView(1, aspect, 1, 10);
// currentPrimitive.Draw(world, view, projection, Color.Red);
// Reset the fill mode renderstate.
GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;
Color color = Color.Red;
// Set BasicEffect parameters.
basicEffect.World = world;
basicEffect.View = view;
basicEffect.Projection = projection;
basicEffect.DiffuseColor = color.ToVector3();
basicEffect.Alpha = 1.0f;// color.A/255.0f;
GraphicsDevice device = basicEffect.GraphicsDevice;
device.DepthStencilState = DepthStencilState.Default;
GraphicsDevice.RasterizerState = RasterizerState.CullClockwise;
GraphicsDevice graphicsDevice = basicEffect.GraphicsDevice;
// Set our vertex declaration, vertex buffer, and index buffer.
graphicsDevice.SetVertexBuffer(vertexBuffer);
graphicsDevice.Indices = indexBuffer;
foreach (EffectPass effectPass in basicEffect.CurrentTechnique.Passes)
{
effectPass.Apply();
int primitiveCount = indices.Count/3;
graphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0,
vertices.Count, 0, primitiveCount);
}
Je devrais aussi clarifier, ce n'est pas le résultat de spritebatch.begin/spritebatch.end, si je commence juste/fin et ne dessine rien, le résultat final est bon, mais si je dessine une police ou un sprite, il casse le cube.
Vous avez des idées?
Ceci a résolu le problème, il changeait l'ordre d'enroulement de réforme. – tweetypi
J'ai eu un problème similaire (http://project-vanquish.co.cc) qui a causé beaucoup de frustration. –