Einführung in Truevision3D Einleitung: In diesem Artikel werden wir uns mit der Truevision Engine beschäftigen, ihr werdet lernen wie man in C# auf die Engine zugreift und wie man einfache 2D Ausgaben durchführt. Die Engine kann in vielen Sprachen verwendet werden (C++, C#, Delphi, Java, VB 6, VB.Net), sie ist für nichtkommerziellen Nutzen kostenlos (es wird dann lediglich ein Wasserzeichen eingeblendet) und für kommerzielle Projekte kostet sie 150$ pro Projekt (weitere Informationen hier). Außerdem beinhaltet die Engine einige nützliche Tools: Model Converter: Erlaubt das konvertieren von 3D Modellen (.3ds/.obj/.mdl) zum Format der Modelle für die Engine (.tvm) Model Viewer: Erlaubt es.tvm Modelle anzuschauen, und zu bearbeiten. Particle Editor: Mit diesem Tool können 3D Partikel Systeme erstellt und bearbeitet werden. Das Format der Partikel Systeme ist.tvp. SfxE: Der Simple Fx Editor erlaubt das erstellen von HLSL Shadern und beinhaltet einige Features, wie z.b. Syntax Highlighting. Sobald ihr das TV3D SDK 6.5 heruntergeladen habt können wir anfangen. Das Grundgerüst: Startet ein neues Projekt und erstellt einen Verweis auf die MVT3D65.dll. Idealerweise könnt ihr noch einen Resource Ordner im Solution Explorer anlegen, in den ihr dann später alle Ressourcen hineinlegen könnt (Modelle, Texturen, etc.). Nun sollte euer Solution Explorer in etwa so aussehen:
Da die Truevision3D Engine keine Game Klasse wie das XNA Framework bietet, müssen wir die Game Loop selbst schreiben, dazu werden wir eine einfache Game Klasse erstellen. public abstract class Game public Form Form get; protected set; public TVEngine Engine get; protected set; public Game(Form form) this.form = form; Engine = new TVEngine(); Form.Load += new EventHandler(form_Load); Form.SizeChanged += new EventHandler(form_SizeChanged); Application.Run(Form); void form_sizechanged(object sender, EventArgs e) //Sobald die Größe des Fensters geändert wurde, //müssen einige Änderungen vorgenommen werden. Engine.ResizeDevice(); void form_load(object sender, EventArgs e) //Sobald die form fertig geladen ist, fangen //wir mit unserem game an... Form.Show(); Initialize(); Run(); private void Run() //Die Game Loop while (Form.Visible) Update(); Draw(); //Damit die Windows Events noch ausgeführt werden //(Fenster verschieben, etc.) Application.DoEvents(); //Räumt alles wieder auf. Engine.ReleaseAll(); Engine = null; public abstract void Initialize(); public abstract void Update(); public abstract void Draw();
Wie ihr seht verwenden wir ein TVEngine Objekt, dies ist eigentlich eine der wichtigsten Klasse der Engine und erlaubt beispielsweise das resizen des Devices. Die erste Anwendung: Nun wollen wir doch mal eine kleine Anwendung mithilfe unserer Game Klasse schreiben, dazu erstellen wir eine MyGame Klasse und leiten diese von Game ab: public class MyGame : Game public MyGame(Form form) : base(form) public override void Initialize() //Die Log Datei //(hierein werden Debug Informationen, etc. geschrieben) Engine.SetDebugFile("debug.txt"); //Hier liegen alle Resourcen Engine.SetSearchDirectory("Resources/"); //Verknüpft das Fenster mit dem Device Engine.Init3DWindowed(Form.Handle); public override void Update() public override void Draw() Engine.Clear(); //Hier kommt später der Code zum zeichnen... Engine.RenderToScreen(); Jetzt passen wir nur noch die Main Methode an: public static void Main() Game game = new MyGame(new Form() Width = 800, Height = 600, Text = "TV3D Test", MinimumSize = new System.Drawing.Size(300, 300) ); Wenn ihr nun die Anwendung startet, solltet ihr in etwa dieses Resultat bekommen:
2D Ausgaben: Bisher haben wir noch nichts manuell gerendert, dies wollen wir jetzt nachholen indem wir einen einfachen Sprite rendern. Dazu müssen wir wissen, dass Truevision3D von vielen Objekten nur die ID in Form eines Integeres speichert (z.b. Texturen). Fügt eurem Projekt nun unter Resources eine Textur hinzu und vergesst nicht einzustellen, dass die Textur in die Output Directory kopiert wird! Um Texturen zu laden benötigen wir die TVTextureFactory Klasse und für das Rendern von Sprites die TVScreen2DImmediate Klasse, also legt die entsprechenden Variablen an. Für die Textur merken wir uns nun auch eine ID als int. screen2d = new TVScreen2DImmediate(); texfactory = new TVTextureFactory(); //Textur einfach laden, da wir bereits die //"Search Directory" gesetzt haben idtexture = texfactory.loadtexture("mytexture.png");
Das Zeichnen dürfte euch nun aus XNA bekannt vorkommen: public override void Draw() Engine.Clear(); screen2d.action_begin2d(); screen2d.draw_sprite(idtexture, 20, 20); screen2d.action_end2d(); Engine.RenderToScreen(); Ihr könnt die TVScreen2DImmediate Klasse also so wie einen Spritebatch aus XNA verwenden. Abschluss: Ihr habt nun die Grundlagen gelernt, wie man eine einfache Truevision3D Szene initialisiert und Sprites zeichnet. Doch die Truevision3D Engine kann noch viel mehr, sie beinhaltet KI und eine Physik Komponente, die auf der Newton Engine basiert!