• Projektinhalt
  • Game Engines
  • Glossar
  • Tutorial
    1. Erste Schritte
    2. Treiber initialisieren
    3. Skybox & Skydome
    4. GUI Text
    5. Terrain
    6. Nebel
    7. Objekte einfügen
    8. Kamera
    9. Beleuchtung
    10. Kollisionsdetektion
    11. Hintergrundmusik
    12. Szene darstellen
    13. Gras
    14. Bäume

  • Download
  • Links

Objekte einfügen

Zum Einfügen eines Modells stellt der Scenemanager von Irrlicht die Methode getMesh bereit. Zum Verknüpfen des Meshes mit dem Szenengraphen wird hier IAnimatedMeshSceneNode verwendet. (es mag vielleicht gewöhnungsbedürftig sein, ein statisches Mesh der Klasse IAnimatedMesh zuzuweisen, aber im Grunde genommen ist ein statisches Mesh ja nichts anderes als ein animiertes Mesh mit nur einem Frame)

//add objects

IAnimatedMesh* sariMesh = irrSceneMgr->getMesh("models/sari-hanFixed.obj");

IAnimatedMeshSceneNode* sariHan =
  • irrSceneMgr->addAnimatedMeshSceneNode(sariMesh);

Die Methode setScale kam schon in Teil V und VI dieses Tutorials vor. Neu sind die Methoden zur Neuberechnung bzw. Normalisierung der Normalen. Sie sind notwendig, weil die Normalen bei der Skalierung des Objektes mit verändert werden. Am Besten lässt sich der Einfluss dieser Methoden erkennen, indem man sie einfach kurz auskommentiert und sich das Ergebnis ansieht. (der vollständige Code ist auf der Downloadseite zu finden)

Wichtig: der Methode recalculateNormals muss nicht das gesamte AnimatedMesh, sondern nur dessen (in diesem Fall) erster Frame übergeben werden.

sariHan->setScale(vector3df(100,100,100));

irrSceneMgr->getMeshManipulator()->recalculateNormals(sariMesh->getMesh(0));

sariHan->setMaterialFlag(EMF_NORMALIZE_NORMALS, true);

Damit der Tempel ein wenig interessanter aussieht, wird er nun noch texturiert.
Dazu müssen zuerst die Texturkoordinaten ermittelt werden, was der MeshManipulator erledigt.

Die Methode makePlanarTextureMapping nimmt folgende Argumente:

  1. das Mesh, auf das die Textur angewendet werden soll
  2. die Auflösung der Textur, d.h. die Relation zwischen den Welt- und den Texturkoordinaten.

irrSceneMgr->getMeshManipulator()->makePlanarTextureMapping(
  • sariMesh->getMesh(0), 0.1f);

sariHan->setMaterialTexture(0,
  • irrDriver->getTexture("textures/lite_earth_texture.jpg"));

Die MaterialFlags sind ja bereits bekannt. Gouraud Shading ist standardmäßig aktiviert, die Alternative wäre Flat Shading.

Das Material EMT_SOLID verwendet nur eine Textur und hat eine matte Oberfläche.

Und setPosition schließlich tut genau das, was man erwarten würde.
(Die Variable terrainCenter wurde zuvor als
vector3df terrainCenter = terrain->getTerrainCenter(); definiert.)

sariHan->setMaterialType(EMT_SOLID);

sariHan->setMaterialFlag(EMF_GOURAUD_SHADING, true);

sariHan->setMaterialFlag(EMF_LIGHTING, true);

sariHan->setMaterialFlag(EMF_FOG_ENABLE, true);

sariHan->setPosition(terrainCenter + vector3df(0, -220, 1500));
zurück weiter

Katarina Boland