Bug pour créer device

Résolu
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 - 18 févr. 2009 à 22:28
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 - 20 févr. 2009 à 21:47
Salut à tous j'ai essayé de faire un petit moteur 3D grâce à un webcast de msdn mais j'ai un bug alors que même après avoir vérifié j'ai fait exactement pareil! C'est dingue! Donc voila je poste le code qui est relativement simple puisque pour les debutants directX. A noter: je suis sous vista et j'ai Visual Studio 2008. Le bug se fait sur l'instanciation (new) du Device. Ca me marque Erreur de l'application. Si quelqu'un pourrait m'aider ca serait super cool parce que c'est mon premier moteur 3D et que ça marche pas donc c'est un peu lourd. Merci beaucoup.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
//A rajouter:
using Microsoft.DirectX; //pour Matrix.
using Microsoft.DirectX.Direct3D; //pour: Device.

namespace MonMoteur
{
public partial class Form1 : Form
{
Device monDevice = null;
Mesh monObjet = null;
float angle = 0;

public Form1()
{
InitializeComponent();
}

private void quitterToolStripMenuItem_Click(object sender, EventArgs e)
{
Close();
}

private void chargerToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
monObjet = Mesh.FromFile(openFileDialog1.FileName, MeshFlags.Managed, monDevice);
}
}

private void Form1_Load(object sender, EventArgs e)
{
PresentParameters param = new PresentParameters();
param.Windowed = true; //On est en mode fen?tr?.
param.SwapEffect = SwapEffect.Discard; //C'est ce qui se passe quand on passe d'une image ? une autre. Ici on va la d?truire.
param.BackBufferFormat = Format.A8B8G8R8; //C'est le r?pertoire de travail. DirectX travaille dans sa m?moire ? lui puis copie vers l'?cran.
param.AutoDepthStencilFormat = DepthFormat.D24X8; //24 bits pour faire la profondeur.
param.EnableAutoDepthStencil = true; //On cr?e le buffer de mani?re automatique.

//FPU en preserve pour ?viter que DirectX ne fassent de la simple pr?cision.
monDevice = new Device(0, DeviceType.Hardware, this, CreateFlags.FpuPreserve | CreateFlags.HardwareVertexProcessing, param);
}

//Boucle de rendu.
public void Render()
{
monDevice.BeginScene(); //Commence le dessin.
monDevice.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.Blue, 1.0f, 0);
monDevice.Transform.World = Matrix.RotationY(angle) * Matrix.Translation(0, 0, 1.0f);
monDevice.Transform.Projection = Matrix.PerspectiveFovLH(0.8f, 4.0f / 3.0f, 0.001f, 10000.0f); //Plan de clip. Cf: visibilit? par rapport ? la cam?ra. Sur les vieux jeux on ? un faible plan de clip car peu de m?moire.

monDevice.RenderState.FillMode = FillMode.WireFrame; //Mode de rendu. Ici filaire.
monDevice.RenderState.CullMode = Cull.None; //On ne fait pas d'?limination des faces cach?es.

if (monObjet != null)
monObjet.DrawSubset(0); //Un objet peut ?tre constitu? de sous objets.

angle += 0.01f; //L'angle croit l'?g?rement ? chaque frame.
monDevice.EndScene(); //Finit le dessin.
monDevice.Present(); //Recopie le buffer de travail vers l'?cran.
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
monDevice.Dispose();
}
}
}




La connaissance est la plus grande des richesses.

2 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
19 févr. 2009 à 12:42
Salut, essaye de remplacer Format.A8B8G8R8 par Format.A8R8G8B8 et/ou de remplacer HardwareVertexProcessing par SofwareVertexProcessing.
3
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
20 févr. 2009 à 21:47
C'était bien ça t'es balaise! Je m'obstinais sur l'endroit du message d'erreur mais c'etait pas là! C'était bien A8R8G8B8 comme tu me l'as dit. Merci Lutinore!!!!

La connaissance est la plus grande des richesses.
0
Rejoignez-nous