Terrain
Irrlicht arbeitet mit Heightmap-basierten Terrains, die GeoMipMap LOD verwenden können. Außerdem lassen sich Manager für tile-based Terrain in den Irrlichtforen finden; sie sind jedoch nicht Teil des offizielen SDKs. Die Konstruktion eines Terrains mit Hilfe einer Heightmap ist einfach:
Auch für Terrain stellt Irllicht einen eigenen Knotentyp zur Verfügung, welchem lediglich die Heightmap übergeben werden muss. (Die Funktion addTerrainSceneNode hat noch weitere Parameter; auf diese soll hier aber nicht eingegangen werden, da sie entweder nicht geändert werden sollten oder durch andere Methoden im Nachhinein verändert werden können, so wie beispielsweise die Skalierung.)
//create terrain
ITerrainSceneNode* terrain =
- irrSceneMgr->addTerrainSceneNode("textures/03heightmap3.bmp");
Die Methode setMaterialTexture erlaubt das Hinzufügen von mehreren Texturen (nicht nur für Terrain): die Höchstanzahl der Texturen für einen Szenenknoten richten sich dabei nach dem Material. Für diesen Terrain wird das Material EMT_DETAIL_MAP verwendet. Dieses hat zwei Schichten: die erste ist eine Colormap, die zweite eine Detailmap.
setMaterialTexture(0,
- irrDriver->getTexture("textures/terrain-texture.jpg"));
terrain->setMaterialTexture(1,
- irrDriver->getTexture("textures/grassDetailMap.jpg"));
terrain->setMaterialType(EMT_DETAIL_MAP);
Der Terrain wird nun noch skaliert mit der Methode setScale. Mit einem y-Wert von 0 würde den Terrain komplett flach dargestellt werden.
Die Methode zur Skalierung der Terraintexturen heisst scaleTexture. Sie nimmt zwei Argumente: die Skalierungsfaktoren für die erste Textur sowie für die zweite Textur. Wird keine Skalierung für die zweite Textur angegeben, so werden ihre Koordinaten der ersten Textur angepasst. Der Skalierungsfaktor bestimmt, wie oft die Textur auf dem Terrain gezeichnet wird. Der Standardwert ist dabei 1; höhere Werte erhöhen die Anzahl, kleinere verringern sie. Negative Werte bewirken, dass der Terrain umgedreht wird.
Das MaterialFlag EMF_LIGHTING bestimmt, ob das Objekt von Lichtquellen beeinflusst wird. Der Defaultwert ist true, trotzdem wird das Flag hier explizit aufgeführt, da man es ganz gerne vergisst... (Ist keine Lichtquelle vorhanden, werden Objekte standardmäßig komplett schwarz dargestellt, da das Flag auf true steht.)
Die Methode getTerrainCenter ist eine der vielen eingebauten Methoden von Terrains. Wir brauchen sie später.
terrain->setScale(vector3df(100, 4.4f, 100));
terrain->setMaterialFlag(EMF_LIGHTING, true);
terrain->scaleTexture(1.0f, 100.0f);
vector3df terrainCenter = terrain->getTerrainCenter();
zurück
weiter