Bug pour créer device [Résolu]

Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
- - Dernière réponse : LordOfTheShadow
Messages postés
175
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.
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
27
3
Merci
Salut, essaye de remplacer Format.A8B8G8R8 par Format.A8R8G8B8 et/ou de remplacer HardwareVertexProcessing par SofwareVertexProcessing.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Lutinore
Messages postés
175
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
2
0
Merci
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.
Commenter la réponse de LordOfTheShadow