Entwickler-Ecke
Multimedia / Grafik - Mesh Klassen Problem -> es wird nichts gezeichnet
Hurraa - Do 27.11.08 20:00
Titel: Mesh Klassen Problem -> es wird nichts gezeichnet
Hallo,
ich habe ein kleines Problem mit der Mesh Klasse. Wenn ich eine *.x file lade sieht man nichts, genauso wie wenn ich Mesh.Box(...) aufrufe...
Ich benutze MDX 1.x und nicht 2.x, weil Visual Studio meint das ist eine Betaversion...
Hier mein Code:
C#-Quelltext
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: 36:
| public class Window : Form { private static Device m_graphic_device = null; private static Mesh mesh;
public Window() { this.Text = Core.GameName; }
public void InitDevice() { PresentParameters param = new PresentParameters();
param.Windowed = true; param.SwapEffect = SwapEffect.Discard;
m_graphic_device = new Device(0, DeviceType.Hardware, this.Handle, CreateFlags.SoftwareVertexProcessing, param);
mesh = Mesh.Box(m_graphic_device, 2.0f, 1.0f, 2.0f); }
public void Render() { m_graphic_device.Clear(ClearFlags.Target, Color.DarkBlue, 1.0f, 0); m_graphic_device.BeginScene();
mesh.DrawSubset(0);
m_graphic_device.EndScene(); m_graphic_device.Present(); } } |
Das wird in in Main() aufgrufen:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| using (Window w = new Window()) { w.InitDevice(); w.Show();
while (w.Created && m_run) { Timer.Update();
w.Render();
Application.DoEvents(); } } |
Irgendwelche Vorschläge?
mfg Hurraa
Kha - Do 27.11.08 20:20
Titel: Re: Mesh Klassen Problem -> es wird nichts gezeichnet
Setzt du denn irgendwo die View- und Projection-Matrix? Vielleicht solltest du dir ein MDX-Tutorial über den grundlegenden Aufbau einer 3D-Szene anschauen.
Hurraa hat folgendes geschrieben : |
Ich benutze MDX 1.x und nicht 2.x, weil Visual Studio meint das ist eine Betaversion... |
Da hat es auch Recht ;) . Und schon lange eingestellt und ohne Support sind alle beide.
Hurraa - Do 27.11.08 20:24
Also das heißt das man Nativ DirectX verwenden soll? Wieso hat eig. Mircosoft die Arbeit an MDX eingestellt?
Wenn man aber trotzdem nicht mit C++ Arbeiten will sondern managed code machen will, was bleiben für Möglichkeiten?
Ich habe mir X Tutorials reingezogen über MDX. Ich habe mir sogar ein Buch gekauft, nur irgendwie hat das nie mein Problem gelöst...
mfg Hurraa
Kha - Do 27.11.08 22:58
MDX wurde durch XNA ersetzt, das aber in erster Linie für Spiele gedacht ist und einige Einschränkungen enthält. Für die volle Bandbreite brauchst du einen Warpper einer 3rd Party, zum Beispiel SlimDX (inkl. DX10!) oder Tao (OpenGL).
Hurraa - Fr 28.11.08 10:32
Ok, danke für die Infos...
mfg Hurraa
Hurraa - So 30.11.08 17:55
Hallo, ich hab jetzt SlimDX ausprobiert und finde das sie ihren Job sehr gut gemacht haben. :)
Auf jeden fall hab ich ein kleines Problem (DX3D9 nicht 10). Es gibt ein Beispiel von SlimDX wo sich ein Teapot bewegt.
Ich wollte dieses Beispiel verstehen und wollte es nachbaun. So weit so gut, nur seh ich den teapot nicht wirklich
vollständig. Leider nur die Umrisse (er wird um die Y Achse gedreht).
Hier mein Code:
Init Funktion:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| public void Init() { PresentParameters present = new PresentParameters(); present.SwapEffect = SwapEffect.Discard; present.DeviceWindowHandle = this.Handle; present.Windowed = true; present.BackBufferWidth = this.Width; present.BackBufferHeight = this.Height; present.BackBufferFormat = Format.A8R8G8B8; Direct3D directx = new Direct3D(); m_device = new Device(new Direct3D(), 0, DeviceType.Hardware, this.Handle, CreateFlags.SoftwareVertexProcessing, present);
mesh = Mesh.CreateTeapot(m_device); mesh.ComputeNormals();
Material material = new Material(); material.Diffuse = Color.FloralWhite; material.Ambient = Color.MidnightBlue; m_device.Material = material;
m_device.SetTransform(TransformState.View, Matrix.LookAtLH(new Vector3(0,0,0),new Vector3(0,0,1),new Vector3(0,1,0))); m_device.SetTransform(TransformState.World, Matrix.Translation(new Vector3(0,0,-100))); } |
Render Funktion:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| public void Render() { m_device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, Color.WhiteSmoke.ToArgb(), 1.0f, 0); m_device.BeginScene();
mesh.DrawSubset(0);
m_device.EndScene(); m_device.Present(); } |
Eigendlich sollte ich doch mit:
C#-Quelltext
1: 2:
| material.Diffuse = Color.FloralWhite; material.Ambient = Color.MidnightBlue; |
Die Farbe bestimmen die mein Objekt hat oder?
Ich habe also 2 Fragen:
1.)Könnte mir jemand unter die Arme helfen bei diesem Beispiel?
2.)Wie verwende ich die Projektionsmatrix?
mfg Hurraa
Hurraa - Mo 01.12.08 19:45
Keiner eine Idee?
mfg Hurraa
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!