Bonjour,
Dans le cadre de mon ter je dois développer une application capable de ranger efficacement une liste de produits dans un conteneur et d'afficher le programme graphiquement.
Le projet avance plutôt bien, si ce n'est que je rencontre un sérieux problème depuis quelques semaines : malgré les diverses faqs et tutos que j'ai parcouru et quelques nuits passées à plancher sur ce bug je n'arrive toujours pas à faire fonctionner correctement le z-buffer, mes 'cuboides' s'obstinant à s'afficher dans l'ordre de leur création ( lien vers mes images et mon code à la fin ).
voilà le code des fonctions d'initialisation :
private bool init_graphs()
{
try
{
presentparams = new PresentParameters();
presentparams.Windowed = true;
presentparams.SwapEffect = SwapEffect.Discard;
presentparams.PresentationInterval = PresentInterval.Default;
presentparams.EnableAutoDepthStencil = true;
presentparams.AutoDepthStencilFormat = DepthFormat.D16;
device = new Device(Manager.Adapters.Default.Adapter, DeviceType.Hardware, this, CreateFlags.HardwareVertexProcessing, presentparams);
device.DeviceReset += new System.EventHandler(this.OnResetDevice);
this.OnCreateDevice(device, null);
this.OnResetDevice(device, null);
return true;
}
catch (DirectXException) { return false; }
}
private void OnResetDevice(object sender, EventArgs e)
{
Device dev = (Device)sender;
tBoite = TextureLoader.FromFile(dev, Application.StartupPath + @"\..\..\tBoite2.bmp");
tFond = TextureLoader.FromFile(dev, Application.StartupPath + @"\..\..\tFond2.bmp");
dev.RenderState.CullMode = Cull.CounterClockwise;
dev.RenderState.Lighting = false;
dev.RenderState.ZBufferEnable = true;
dev.RenderState.ZBufferWriteEnable = true;
dev.RenderState.ZBufferFunction = Compare.Always;
dev.VertexFormat = CubeD3D.customVertexFormat;
dev.RenderState.DestinationBlend = Blend.DestinationColor;
dev.RenderState.SourceBlend = Blend.SourceColor;
device.RenderState.FillMode = FillMode.Solid;
dev.Transform.View = Matrix.LookAtLH(new Vector3(200.0f, 150.0f, 220.0f),
new Vector3(50.0f, 50.0f, 50.0f),
new Vector3(0.0f, 1.0f, 0.0f));
dev.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI / 4.0f, 1.0f, 10.0f, 400.0f);
}
Auriez vous une idée de ce qui pourrais provoquer ce bug ?
Merci d'avance pour vos reponses
Thurfir
Liens :
Affichage 'normal'
Cubes inversé
Code source simplifié : ne contient que mes fonctions graphiques simplifiées et un solveur simple ( il teste les 6 cas de base ) retournant une liste de cubes.
Partager