Aktuelle Zeit: 29.04.2024, 16:22

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: [.Net CP] Tutorial 02 : Quake 3 Map
BeitragVerfasst: 02.10.2007, 18:16 
Offline
Benutzeravatar

Registriert: 28.06.2007, 18:26
Beiträge: 54
Wohnort: München
Tutorial 02 : Quake 3 Map

Willkommen zum zweiten Tutorial von der Irrlicht .Net CP.
Dieses Tutorial stammt vom anfang aus dieser Seite.
Und wurde von mir in das Deutsch übersetzt.

In diesen Tutorial werde ich euch erklären wie ihr ein
Quake 3 Map Laden könnt und das mesh mit einer
Benutzer steuernden Camera ansehen könnt.

Am ende wird das so aussehen:
Bild

Als aller erstes fügen wir unserer "Using" variablen ein.
Code:
using System;
using System.IO;
using System.Text;
using IrrlichtNETCP;
using IrrlichtNETCP.Inheritable;


Dann folgt Namespace,Klasse, und die üblich "main" funktion.

Code:
namespace Tutorial01
{
    class Tutorial01
    {
        static void Main(string[] args)
        {


Jetzt kommt der Text(Auf der Konsole), der den benutzer sagt
"Bitte wähle einen Graphic Driver:"...

Code:
StringBuilder sb = new StringBuilder(); 
sb.Append("Bitte wähle einen Graphic Driver:\n"); 
sb.Append("(a) Direct3D 9.0c\n(b) Direct3D 8.1\n(c) OpenGL 1.5\n"); 
sb.Append("(d) Software Renderer\n(e) Apfelbaum Software Renderer\n"); 
sb.Append("(f) Null Device\n(otherKey) exit\n\n"); 


Hier bleibt die Konsole solange stehen bis er eine eingabe
vom Benutzer erhaltet.

Code:
TextReader tIn = Console.In; 
TextWriter tOut = Console.Out; 
tOut.Write(sb.ToString()); 
string input = tIn.ReadLine(); 


Jetzt wird eine Switch schleife eingefügt in dem der
Benutzer einen Graphic Renderer ( Video Driver ) Seiner
wahl nehmen kann.

Code:
switch (input)
{
                case "a":
                    driverType = DriverType.Direct3D9;
                    break;
                case "b":
                    driverType = DriverType.Direct3D8;
                    break;
                case "c":
                    driverType = DriverType.OpenGL;
                    break;
                case "d":
                    driverType = DriverType.Software;
                    break;
                case "e":
                    driverType = DriverType.Software2;
                    break;
                case "f":
                    driverType = DriverType.Null;
                    break;
                default:
                    return;
}


Dann kommt das "IrrlichtDevice", das wurde aber bereits im ersten
[.Net CP] Tutorial erklärt.
Code:
IrrlichtDevice device = new IrrlichtDevice(driverType, new Dimension2D(640, 480), 32, false, true, true, true);


Hier stellen wir die von irrlicht mitgelieferte Irrlicht Media Verzeichnis an.
Code:
device.FileSystem.WorkingDirectory = "../../media";


Falls das verzeichnis nicht gefunden wird.
Erscheint eine MessageBox mit den text "Device creation failed."
Code:
if (device == null)
{
                tOut.Write("Device creation failed.");
                return;
}


Um die Quake 3 map am Bildschierm anzuzeigen zu lassen
müssen wier zuerst die .pk3 Dateien einbinden das sind
schlicht .zip Dateien die umbennant wurden. Jetzt fügen
wir das .pk3 Archiv in unserem FileSystem (Dateisystem)
hinzu. Wenn ihr das getan habt könnt ihr jetzt auf die
Dateien zugreifen die sich in der .pk3-Akte befindet.

Code:
device.FileSystem.AddZipFileArchive("map-20kdm2.pk3", true, true);


Jetzt können wir unser Mesh laden unzwar per getMesh()
Und wir geben ihn ein Pointer. Da unser IAnimated mesh
nur aus einem Frame besteht, können wir auch nur diesen
einen Frame der Animation laden, dieser Frame ist unser
Quake Map, jetzt erstellen wir noch auf unserem Mesh ein
OctTree scene node das geht mit addOctTreeSceneNode().
Mit Hilfe von OctTree wird unsere Sene ein bisschen Opt-
miert in dem nur das Sichtbare des Meshes angezeigt wird.
Würden wir jetzt AnimatedMeshSceneNode benutzen würde Die
Ganze map gerendert sogar wenn sie nicht sichbar wäre.
Ihr könnt natürlicht auch AnimatedMeshSceneNode Mesh ben-
utzen aber das lohnt sich nur bei kleinen Maps. Bei sehr
großen Maps ist ehr ddOctTreeSceneNode() viel nützlicher.

AnimatedMesh mesh = device.SceneManager.GetMesh("20kdm2.bsp");
SceneNode node = null;

Code:
if (mesh != null)
node = device.SceneManager.AddOctTreeSceneNode(mesh, device.SceneManager.RootSceneNode, -1, 128);


Unser Mesh wurde nicht nicht exakt auf den Punkt (0,0,0)
modelliert, deshalb müssen wir es ein bisschen verschieben

Code:
if (node != null)
node.Position = (new Vector3D(-1300, -144, -1249));


Um unsere Map überhaupt sehen zu können brauchen wir eine
Kamera. Wir erstellen eine Kamera die sich vom Benutzer
bewegen lässt dan können wir auch das Map auch in der per-
spektiven betrachten. Die Irrlicht engine hat verschieden-
ne Cameras wie zum Beispiel die Maya-Camera das ist
die selbe wie in das Program Maya: Rotieren können sie mit
dem linkem Mausknopf und zoomen können sie mit beiden ged-
drückten Mausknöpfen. Mit dieser Funktion könnt ihr es ein-
setzten addCameraSceneNodeMaya() . In diesen Beispiel woll-
en wir eine Camera erschaffen die auch in first person
Shooter Spielen benutzt werden (FPS) .

Code:
device.SceneManager.AddCameraSceneNodeFPS(device.SceneManager.RootSceneNode, 100, 100, false);


Hier wird die maus in der Anwendung unsichbar gemacht.

Code:
device.CursorControl.Visible = false;


So jetzt haben wir alles getan, jetzt müssen wir nur noch
alles Rendern. Und des weiteren lassen wir die anzahl der
gerenderten Objekte und die Frames in der Sekunde am Fenseter
Titel ausgeben. Die 'if (device->isWindowActive())' Zeile ist
optional, sie hindert das die Engine den Cursor nach den wech-
seln zwischen anwendungen ( Fenstern ) neu aufsetzt.

Code:
int lastFPS = -1;

while (device.Run())
{

                if (device.WindowActive)
                {
                    device.VideoDriver.BeginScene(true, true, new Color(0, 200, 200, 200));
                    device.SceneManager.DrawAll();
                    device.VideoDriver.EndScene();

                    int fps = device.VideoDriver.FPS;

                    if (lastFPS != fps)
                    {
                        device.WindowCaption = "Irrlicht Engine - Quake 3 Map example " +
                        "FPS:" + fps.ToString();
                        lastFPS = fps;
                    }
                }
}


Zuguter letzt wird das Irrlicht device gelert.

Code:
device.Dispose();


Und danach kommt das ende von Namespace,Klasse, und der main schleife.
Code:
        } // Ende der Main Schleife

    } //Ende der Klasse

} //Ende von Namespace

Bild
Das ganze gibt es auch in Quellcode


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de