Aktuelle Zeit: 22.12.2024, 08:07

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 46 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste
Autor Nachricht
BeitragVerfasst: 03.03.2007, 13:34 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
In diesem Tutorial wird gezeigt, wie man die Irrlicht-Engine in einer IDE einrichtet. Danach werden die ersten Schritte gemacht und alles endet in einem "HelloWorld"-Programm, welches auch gleich die Darstellung eines 3D-Objektes miteinbezieht. Außerdem kommt die GUI und der Szene-Manager zum Einsatz.
Dieses Tutorial stammt von der offiziellen Irrlicht-Website und wurde von marsupial ins Deutsche übersetzt.

Die IDE und Irrlicht:
Um die Engine benutzen zu können, müssen wir die Header-Datei <irrlicht.h> einbinden. Sie befindet sich im Irrlicht-Engine SDK im Ordner \include. Damit der Compiler diese Datei auch finden kann, müssen wir ihm irgendwie mitteilen, wo er suchen soll. Wie das geht, ist von IDE zu IDE unterschiedlich, hier wird nur die Vorgehensweise in der Microsoft Visual Studio C++ 6.0-IDE angesprochen.

Microsoft Visual Studio C++ 6.0:
Wähle zuerst das Menü "Extras->Optionen" aus. Wechsle dann in das Tab "Verzeichnisse" und wähle das "Include-Dateien"-Item in der ComboBox. Füge dann das "\include"-Verzeichnis von Irrlicht hinzu (also das Verzeichnis, wo sich Irrlicht auf deinem PC befindet + "\include"). Jetzt findet der Compieler schon mal die Header-Datei, allerdings benötigen wir auch noch den Ort der "irrlicht.lib"-Datei. Wähle dazu in der Combo Box den Eintrag "Bibliothekdateien" aus und füge das \lib\VisualStudio-Verzeichnis hinzu. Fertig.


Los geht's:
Wenn wir dem Compiler also gezeigt haben, wo er die Dateien finden kann, dann müssen wir sie nur noch in unseren Code einbinden. Das geht so:
Code:
#include <irrlicht.h>


Die Irrlicht Engine verwendet für alles den Namespace 'irr'. Wenn du also eine Klasse der Engine nutzen willst, musst du ein "irr::" vor den Namen der Klasse setzen. Um zum Beispiel IrrlichtDevice zu benutzen, muss man "irr::IrrlichtDevice" schreiben. Um sich die Schreibarbeit zu sparen, sagen wir dem Compiler einfach, dass wir jetzt den Irrlicht-Namesoace benutzen. Also schreiben wir:
Code:
using namespace irr;


Außerdem gibt es noch 5 "sub-namespaces" in der Irrlicht-Engine. Am besten du schaust dir einfach mal die Beschreibung in der Doku an: Namespace List. Um dieses Beispiel einfach zu halten, wollen wir nicht jedes mal den passenden Namespace vor die Klasse schreiben. Deshalb:
Code:
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;


Um die Irrlicht.DLL nutzen zu können, müssen wir die Irrlicht.lib-Datei linken. Normalerweise kann man das in den Projektoptionen vornehmen, um es einfacher zumachen nutzen wir hier aber eine "pragma"-Anweisung:
Code:
#pragma comment(lib, "Irrlicht.lib")


Jetzt die main()-Methode: Um plattformunabhängig zu arbeiten, müssen wir einfach main() verwenden. Wenn dein Programm aber nur unter Windows laufen soll und das Konsolen-Fenster beim Programmstart nicht mehr erscheinen soll, musst du die WinMain-Methode benutzen.
Code:
int main()
{


Die wichtigste Funktion der Engine heißt "createDevice". Das Irrlicht Device, Device könnte man am passendsten mit "Gerät" oder freier sogar als "Renderer" übersetzen, ist das Wurzelobjekt für die Arbeit mit der Engine. Man kann ein Irrlicht Device ganz einfach mit der Funktion createDevice() erstellen. Die Funktion hat 7 Parameter:

•deviceType: Typ des Device. Das kann NULL sein, der Softwarerenderer, Direct3D8, Direct3D9 oder OpenGL. In diesem Beispiel verwenden wir EDT_SOFTWARE, aber natürlich kannst du auch mal die anderen Renderer verwenden, also EDT-NULL, EDT_DIRECT3D8, EDT_DIRECT3D9, oder EDT_OPENGL.
•windowSize: Größe des Fensters oder Auflösung des Vollbilds. Wie benutzen hier 512x384.
•bits: Die Farbtiefe. Empfehlenswert sind 16 oder 32 Bit. Im Fenstermodus wird dieser Parameter ignoriert.
•fullscreen: Die Angabe, ob das Programm im Vollbildmodus laufen soll oder nicht.
•stencilbuffer: Die Angabe, ob wir den Stencil-Buffer um Schatten darzustellen.
•vsync: Gibt an, ob vsync aktiviert wird oder nicht. Dieser Parameter ist nur im Vollbildmodus sinnvoll.
•eventReceiver: Ein Objekt, welches die Events empfängt. Wir brauchen in diesem Beispiel den Parameter nicht und setzen ihn auf 0.
Code:
IrrlichtDevice *device =
createDevice(EDT_SOFTWARE, dimension2d<s32>(512, 384), 16,
false, false, false, 0);


Jetzt setzen wir den Fenstertitel. Beachte, dass vor dem String ein 'L' steht - die Irrlicht-Engin nutzt immer 2 Byte große Chars, also "Wide Characters", um Text darzustellen.
Code:
device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");


Jetzt speichern wir Zeiger für den Video-Treiber, den Szenen-Manager und die GUI-Umgebung, sodass wir nicht immer "device->getVideoDriver()", "device->getSceneManager()", und "device->getGUIEnvironment()" schreiben müssen.
Code:
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();


Jetzt fügen wir ein Text-Label hinzu, welches von der GUI bereitgestellt wird. Es wird an der Position 10x10 positioniert und ist 200x22 Pixel groß.
Code:
guienv->addStaticText(L"Hello World! This is the Irrlicht Software engine!",
rect<int>(10,10,200,22), true);


Um etwas Interessantes darzustellen, laden wir ein Quake 2-Modell und zeichnen es ein. Dazu müssen wir das Mesh nur mit der Methode "getMesh()" des Szenen-Managers laden und einen Knotenpunkt (node) hinzufügen, was mit addAnimatedMeshSceneNode() gechieht. Statt einem Quake2-Modell (.md2) lässt sich auch ein Maya-Objekt (.obj), eine komplette Queak 3-Map (.bsp) oder eine Milkshape-Datei (.ms3d) laden.
Kleiner Hinweis: Das hier verwendete Quake 2-Modell (sydney.md2) wurde von Brian Collins modelliert.
Code:
IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );


Um das Modell ein wenig schöner zu machen, ändern wir das Material: Dir deaktivieren das Licht, da wir kein dynamisches Licht in unserer Szene haben und das Modell somit schwarz wäre. Zusätzlich setzen wir den Frame-Loop so, dass die Animation immer wieder zwischen den Frames 0 und 310 abgespielt wird. Als letztes bekommt das Modell noch eine Textur, da es sonst nur eine einfache Farbe hätte.
Code:
if (node)
{
node->setMaterialFlag(EMF_LIGHTING, false);
node->setFrameLoop(0, 310);
node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );
}


Um das Mesh zu sehen, platzieren wir eine Kamera an die Position (0, 10, -40). Die Kamera "schaut" zum Punkt 0, 5, 0.
Code:
smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));


So. Jetzt, wo wor die Szene fertig haben, müssen wir sie noch darstellen. Das machen wir in einer While-Schleife, die solange läuft, wie unsere Szene äuft. Unterbrochen wird die Schleife etwa, wenn das Fenster geschlossen wird.
Code:
while(device->run())
{


Alles muss zwischen einem "beginScene()" und einem "endScene()"-Aufruf dargestellt werden. The "beginScene" übermalt den Bildschirm mit einer bestimmten Farbe und einem Depth-Buffer.
Dann lassen wir den Szenen-Manager und die GUI ihre Elemente darstellen und Ãœbertragen es mit "endScene()" auf den Bildschirm.
Code:
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll(); guienv->drawAll(); driver->endScene(); }


Wenn das Programm beendet werden soll, muss das Irrlicht-Device gelöscht werden. Ãœberhaupt solltest du alles löschen. was mit einer Funktion oder Methode erstellt wurde, die mit "create" beginnt. Das Objekt wird einfach durch einen Aufruf von "->drop()" gelöscht. Schau dir einfach die Doku für weitere Informationen an.
Code:
device->drop();
return 0; }


Fertig :)


Nach oben
 Profil  
 
BeitragVerfasst: 02.10.2008, 15:47 
Offline

Registriert: 30.09.2008, 19:41
Beiträge: 12
un wir funzt das einbinden von irrlicht bei visual c++ 08 (express)?


Nach oben
 Profil  
 
BeitragVerfasst: 02.10.2008, 15:59 
Offline
Benutzeravatar

Registriert: 17.02.2008, 14:08
Beiträge: 125
Extras -> Optionen -> Projekte und Projektmappen -> VC++-Verzeichnisse -> Verzeichnisse anzeigen für:

Ansonsten halt so wie oben beschrieben ;)

MfG

_________________
Cold-Death
Magnon


Nach oben
 Profil  
 
BeitragVerfasst: 03.10.2008, 10:13 
Offline

Registriert: 30.09.2008, 19:41
Beiträge: 12
dankeschön
:D :D :D :D :D


Nach oben
 Profil  
 
BeitragVerfasst: 29.01.2009, 13:36 
Offline
Benutzeravatar

Registriert: 28.01.2009, 12:47
Beiträge: 26
nachdem ich hier viewtopic.php?f=1&t=906&hilit=
davon überzeugt wurde doch kein c# zu nutzen habe ich mal das tutorial getestet.

problem : http://sites.google.com/site/schlumpf20 ... t-tut1.JPG

Code:

// tut1.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <irrlicht.h>

using namespace irr;

using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;

#pragma comment(lib, "Irrlicht.lib")

int main()
{
IrrlichtDevice *device =
createDevice(EDT_SOFTWARE, dimension2d<s32>(512, 384), 16,
false, false, false, 0);

device->setWindowCaption(L"Hello World! - Irrlicht Engine Demo");

IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();

guienv->addStaticText(L"Hello World! This is the Irrlicht Software engine!",
rect<int>(10,10,200,22), true);

IAnimatedMesh* mesh = smgr->getMesh("../../media/sydney.md2");
IAnimatedMeshSceneNode* node = smgr->addAnimatedMeshSceneNode( mesh );

if (node)
{
node->setMaterialFlag(EMF_LIGHTING, false);
node->setFrameLoop(0, 310);
node->setMaterialTexture( 0, driver->getTexture("../../media/sydney.bmp") );
}

smgr->addCameraSceneNode(0, vector3df(0,30,-40), vector3df(0,5,0));

while(device->run())
{

driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll(); guienv->drawAll(); driver->endScene(); }

device->drop();
return 0; }


_________________
ich bin nich gut aber ich weis was ich haben will *g


Nach oben
 Profil  
 
BeitragVerfasst: 29.01.2009, 14:28 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
Sieht so aus als würde er versuchen mit der Irrlicht.lib zu linken aber diese nicht finden, wodurch ein nicht aufgelöstes symbol als fehler ausgegeben wird.

schau doch mal nach ob das lib verzeichnis der irrlicht engine in den verzeichnis optionen eingetragen ist:

Extras -> Optionen -> Projekte und Projektmappen(links ganz oben in der liste) -> VC++ Verzeichnisse

danach rechts oben in der Dropdown-Box Bibliotheksdateien auswählen.

dann sollte dort eigentlich auch das lib verzeichniss von irrlicht eingetragen sein, wenn nicht einfach noch hinzufügen.


Nach oben
 Profil  
 
BeitragVerfasst: 29.01.2009, 14:37 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Sieht danach aus, als ob du eine falsche Dll verwendest. Nimmst du die aus dem win32-visualstudio verzeichnis? Und auch in der richtigen Version?

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 29.01.2009, 16:06 
Offline
Benutzeravatar

Registriert: 28.01.2009, 12:47
Beiträge: 26
irrlicht-1.5.zip entpackt nach c:\irrlicht-1.5 dann per extras/optionen verlinkt

neues projekt erstellt und das was in [code] steht reinkopiert alles was drin stand gelöscht

run gedrückt und bang :?


ps : stelle antrag auf dateianhänge
...Das Kontingent für Dateianhänge ist bereits vollständig ausgenutzt.... :(

_________________
ich bin nich gut aber ich weis was ich haben will *g


Nach oben
 Profil  
 
BeitragVerfasst: 29.01.2009, 16:12 
Offline
Moderator
Benutzeravatar

Registriert: 25.03.2007, 18:11
Beiträge: 834
Wohnort: Hagen, NRW
Ok was genau hast du wie verlinkt?

Du musst unter bibliotheken (libraries) den ordner Irrlicht/lib/win32-visualstudio eintragen und dann in den Projekteigenschaften unter Linker Irrlicht.lib als zusätzliche abhängigkeit eintragen.

Die Irrlicht.dll aus dem ordner irrlicht/bin/win32-visualstudio muss sich irgendwo befinden, wo sie deine exe dann auch finden kann.

Ach und ganz wichtig: Lösch die Irrlicht.dll die du ins sys32 verzeichnis kopiert hast wieder. Windows wird wahrscheinlich versuchen diese Dll zu laden.

_________________
Phenom X4 9950 BE | 6144MB DDR2-800 | GeForce 8800GT 512MB | Asus M3A32-MVP Deluxe | 2TB HDD | 520W Seasonic NT | Soprano Tower | Samsung 22" TFT + Fujitsu-Siemens 17" TFT + Toshiba 42" FullHD LCD | Windows 7 Proessional x64
Behind the Brain


Nach oben
 Profil  
 
BeitragVerfasst: 29.01.2009, 17:45 
Offline
Benutzeravatar

Registriert: 28.01.2009, 12:47
Beiträge: 26
ok mach ich sobald ich über "hallo welt" in Microsoft Visual Studio 2008 c++ raus bin :shock: ( morgen oder so :lol: )

_________________
ich bin nich gut aber ich weis was ich haben will *g


Nach oben
 Profil  
 
BeitragVerfasst: 29.01.2009, 18:43 
Offline

Registriert: 12.04.2007, 11:47
Beiträge: 108
Sylence hat geschrieben:
Ach und ganz wichtig: Lösch die Irrlicht.dll die du ins sys32 verzeichnis kopiert hast wieder. Windows wird wahrscheinlich versuchen diese Dll zu laden.

Stimmt nicht. Das tut windows nur wenn du keine dll direkt im exe verzeichniss hast.


Nach oben
 Profil  
 
BeitragVerfasst: 29.01.2009, 19:32 
Offline
Benutzeravatar

Registriert: 28.01.2009, 12:47
Beiträge: 26
Sudi hat geschrieben:
Sylence hat geschrieben:
Ach und ganz wichtig: Lösch die Irrlicht.dll die du ins sys32 verzeichnis kopiert hast wieder. Windows wird wahrscheinlich versuchen diese Dll zu laden.

Stimmt nicht. Das tut windows nur wenn du keine dll direkt im exe verzeichniss hast.



also wenn eine externe datei nicht im verzeichniss der exe is wird immer wenn ich den pfad nicht änder in c:\windows\system32\ gesucht ?

_________________
ich bin nich gut aber ich weis was ich haben will *g


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 46 Beiträge ]  Gehe zu Seite 1, 2, 3, 4  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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