160 likes | 264 Views
XNA 3D Tutorial. Anzeigen eines Objektes. Inhalt. Initializing. Das Initialisieren eines 3D-Objektes ist, wenn man XNA sowie so schon in 2D ausprobiert hat, ganz einfach:. Z unächst fügen Sie in ihre Klasse, welche automatisch bei der Projekterstellung erstellt wird, folgende Zeile ein:.
E N D
XNA 3D Tutorial Anzeigen eines Objektes
Initializing Das Initialisieren eines 3D-Objektes ist, wenn man XNA sowie so schon in 2D ausprobiert hat, ganz einfach: Zunächst fügen Sie in ihre Klasse, welche automatisch bei der Projekterstellung erstellt wird, folgende Zeile ein: ModelmyModel;
Contentloading Nachdem Sie die Objektinstanz vom Typ „Model“ erstellt haben, muss das Modell aus der Content-Directory (Contentordner im Projekt) geladen werden. Dies erledigt sich durch folgende Zeile, welche Sie in die „LoadContent“-Methode, der vorherig genannten Klasse, einfügen: myModel = Content.Load<Model>(„filename“); Statt „filename“ schreiben Sie einfach den Namen ihres Modelles zwischen die Anführungszeichen
Zeichnen Nun kommt der eigentlich komplizierteste Part in der ganzen Sache – Das Zeichnen. Aber keine Angst es ist nicht so schwer, wie es aussieht. Hier zunächst der Code: foreach(ModelMeshmeshinmyModel.Meshes) { foreach(BasicEffecteffectinmesh.Effects) { effect. EnableDefaultLighting(); effect.World = Matrix.Identity; effect.View = Matrix.CreateLookAt(newVector3(0, 0, -5), Vector3.Zero, Vector3.Up); effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), GraphicsDevice.Viewport.AspectRatio, 0.1f, 1000f); } mesh.Draw(); }
Zeichnen-Fortsetzung Um nun kurz zu erklären was in diesem Code passiert: Zunächst werden 2 Schleifen durchgegangen. Die erste Schleife zählt alle „Modelmesh“ aus, übergibt diese an die zweite Schleife und zeichnet diese zum Schluss noch mittels der Funktion: „Draw()“ des „Mesh“-Objektes.
Zeichnen-Fortsetzung In der 2 Schleife werden alle Effekte des aktuellen Meshes aus der vorherigen Schleife gesetzt. Zunächst wird mittels der Funktion „EnableDefaultLightning()“ das Standartlicht auf das Objekt gesetzt. Danach wird die Eigenschaft „World“ des „BasicEffect“-Objektes belegt, welche ich in der nächsten Seite nochmals genauer erklären werde.
Zeichnen-Fortsetzung Die Eigenschaft „World“ wird in dem hier verwendeten Beispiel mit „Matrix.Identity“ belegt, was bedeutet dass das Objekt an Position 0,0,0 mit keiner spezifischen Rotation oder Skalierung gezeichnet wird. Denn die World-Eigenschaft des Objektes bestimmt dessen, wie oben genannt, Rotation, Position und Skalierung. Wollen Sie z. B. die Position des Objektes verändern geben Sie statt „Matrix.Identity“, „Matrix.CreateTranslation(newVector3(x,y,z))“ ein Statt x,y,z müssen natürlich die Koordinaten eingegeben werden.
Zeichnen-Fortsetzung Als nächstes wird die „View“-Eigenschaft belegt. Dazu wird wieder eine neue Matrix erstellt, wobei der erste Parameter, die Position der Kamera darstellt, der zweite Parameter den Punkt auf den die Kamera gerichtet ist und der dritte Parameter der Orientierungspunkt der Kamera. In der nächsten Seite zeige ich ein Bild, welches das besser beschreiben kann.
Zeichnen-Fortsetzung Das sollte das vorhererzählte nochmals gut verdeutlichen. Natürlich können für die Kamera auch andere Koordinaten genommen werden.
Zeichnen-Fortsetzung Als letztes wird die „Projection“-Eigenschaft belegt, welches wieder eine Matrix benötigt. Hierzu wird die „CreatePerspectiveFieldOfView“-Methode verwendet. Die Parameter dieser Methode sind leicht erklärt. Der erste Parameter ist für die Spannweite der Kamera verantwortlich, also hier 45°. Diese muss allerdings in das Bogenmaß umgerechnet werden. Das übernimmt der „MathHelper“ mit der Funktion „ToRadians()“ für uns.
Zeichnen-Fortsetzung Der zweite Parameter ist das Fensterformat. Im Standartfall ist das 4:3. Man bekommt das Fensterformat über die „AspectRatio“-Eigenschaft des „Viewport“-Objektes. Andernfalls kann man auch einfach die Fensterbreite durch die Fensterhöhe teilen. Durch das Bildschirmformat wird bestimmt, wie das Bild auf das Fenster projiziert werden muss.
Zeichen-Fortsetzung Der 3. und der 4. Parameter sind zuständig für die sogenannte „NearPlane“ und die sogenannte „FarPlane“. Die „NearPlane“ zeigt dem Programm, ab welcher Nähe abgeschnitten werden soll. Die „FarPlane“ bestimmt, ab welcher Weite abgeschnitten werden soll. Um das ganze nochmals zu verdeutlichen, zeige ich wieder auf der nächsten Seite ein Bild, welches die „NearPlane“ und die „FarPlane“ nochmals erklären soll.
Zeichnen-Fortsetzung Hier kann man gut erkennen, wie „NearPlane“ und „FarPlane“ behandelt werden. Alle Objekte, die vor „NearPlane“ und nach „FarPlane“ sind, kann man nicht sehen. Der Grund, warum so was gemacht wird, ist ganz einfach: Da viele Spiele mehr als 1000 Objekte enthalten, würde, wenn man alle Objekte zeichnen lassen würde, wahrscheinlich der eigene PC abstürzen, weil das Rendern viel zu viel Arbeitsspeicher benötigen würde.
Zusammenfassung Wenn Sie nun Alles Richtig gemacht haben, müsste ihr Objekt korrekt angezeigt werden. Sie sollten jetzt probieren ein wenig mit den Eigenschaften des „BasicEffect“-Objektes rumzuspielen. Ich werde zudem auch ein Tutorial hochstellen, welches zeigt wie man Texturen auf Objekten anzeigt, oder mit dem Licht rumspielt.
Ende Nun das ist alles was ihr eigentlich braucht. Ich hoffe ihr habt nun alles gut verstanden und könnt dies auch nun gut für eigene Projekte verwenden. Falls ihr noch Fragen über dieses Tutorial oder allgemeine Fragen über XNA habt, könnt ihr mir auch gerne eine Mail schicken. Meine E-Mailadresse ist carl.peuthert@freenet.de