Bonjour
Je me suis mis au C# recement pour faire du DirectX ...
Mais me voila déjà confronté a un probleme
En effet, j'arrive a créer mon affichage, afficher des primitives (triangles) etc, faire un peu mumuse avec l'éclairage, tout va bien...
Mais des que je fais Intervenir un Mesh, là rien ne va plus
En effet, tout d'abord il apparait comme si les normales étaient inversées, et ensuite, comme si il y avait des faces a l'intérieur de mon mesh (Et oui puisque je peux voir l'intérieur du mesh mais pas l'extérieur :o)...
Et pour en rajouter une couche, si je créé mon mesh avec DirectX (MonMesh = Mesh.Teapot(device)), ca me fait pareil, mais en plus je vois les parties du mesh se monter dessus :o
Bref, c'est la grosse galere et le gros n'importe quoi !![]()
Tout d'abord, une image pour montrer le probleme en pleine action ...
Et au niveau du code:
Initialisation:
OnIdle:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void InitializeDevice() { //PresentParameters pour le Device presentParams = new PresentParameters(); presentParams.Windowed = true; presentParams.SwapEffect = SwapEffect.Discard; presentParams.PresentationInterval = PresentInterval.Immediate; device = new Device(0, DeviceType.Hardware, this, CreateFlags.SoftwareVertexProcessing, presentParams); //Mesh MonMesh = Microsoft.DirectX.Direct3D.Mesh.FromFile(Application.StartupPath+"\\meshes\\torus.x",MeshFlags.Managed,device,out materials ) }
J'espere que vous pourrez m'aider rapidement, car ca me rpend la tete depuis le début d'aprem
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 private void OnIdle(object sender, System.EventArgs e) { //Caméra device.Transform.Projection = Matrix.PerspectiveFovLH((float)Math.PI/4, (this.Width/this.Height), 0.1f, 500000f); device.Transform.View = Matrix.LookAtLH(new Vector3(0,50,50), new Vector3(0,0,0), new Vector3(0,-1,0)); device.RenderState.CullMode = Cull.None; device.Transform.World = Matrix.RotationZ(angle); //Clear device.Clear(ClearFlags.Target,Color.FromArgb(60,60,70),1.0f,0); this.SetText(); Frames++; device.BeginScene(); //Eclairage device.Lights[0].Type = LightType.Directional; device.Lights[0].Direction = new Vector3((float)Math.Cos(Environment.TickCount / 250.0f), 1.0f, (float)Math.Sin(Environment.TickCount / 250.0f)); device.Lights[0].Diffuse = Color.FromArgb(235,230,255); device.Lights[0].Enabled = true; //Dessiner le mesh for (int i=0; i<=materials.Length-1; i++) { device.Material = MonMeshMaterials[i].Material3D; MonMesh.DrawSubset(i); } this.DrawText(); device.EndScene(); device.Present(); this.Invalidate(); }
Merci d'avance a tous!
Ingham
Partager