LordOfTheShadow
Messages postés174Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention 9 septembre 2010
-
18 févr. 2009 à 22:28
LordOfTheShadow
Messages postés174Date d'inscriptionvendredi 22 décembre 2000StatutMembreDerniè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;
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.
}
LordOfTheShadow
Messages postés174Date d'inscriptionvendredi 22 décembre 2000StatutMembreDernière intervention 9 septembre 20105 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!!!!