Seite 1 von 2

Irrlicht Engine >>> 2 Fragen bezüglich Terrain/Map

Verfasst: 31.01.2007 21:00
von Vermilion
Da ich für mein Spiel eine 3D Engine verwenden möchte, beschäftige ich mich derzeit mit der Irrlicht Engine, da ich durch einen Tipp auf die Aufmerksam gemacht wurde. Sie ist insgesamt besser als die OGRE in PB, sie hat viel mehr Möglichkeiten und größere Kompatibilität (z.B. dass man Terrains als BMP laden kann, was ich viel angenehmer finde, als das exotische 256 Farben 8Bit PNG Bild der PB OGRE >_< ), jedoch vermisse ich ein paar kleine feine Details aus der PB-OGRE (siehe 2. Frage).
Also,

1.: Ich will im Spiel große, weite Maps verwenden, für Naturlandschaften. Siehe Terrain Screenshot unten. Soll ich da Terrains oder BSP Maps (soweit ich weiß, unterstützt Irrlicht nur BSP) verwenden? Dabei soll berücksicht werden, dass gelegentlich Objekte, Meshes, wie Häuser auftauchen sollen oder etc., und die als Mesh? Wird das mit der Textur nicht auch ein bisschen Kompliziert?
(Man könnte die Map vergleichen mit einer von UT2004, dessen Name ich vergessen habe, is auch egal, gibt ja mehrere solche, in der es weite Naturlandschaften sowie auch Gebäude darauf gibt. Oder solche Maps wie sie in Halo vorkommen, am Anfang aufm Ring)*

2.: Wie kann ich bei der Irrlicht Engine die TerrainHöhe an einem bestimmten Punkt feststellen? Also so etwas wie der Befehl "TerrainHeight()" bei PB OGRE.

Bild

* mh, ich glaube ich weiß schon, bsp maps oder? ><* Weil Klippen oder Steilhänge kriege ich nich mit Terrain hin...

Verfasst: 31.01.2007 21:35
von neotoma
Hi Vermilion,

Irrlicht unterstützt BSPs und Terrains. Wobei BSP idealer für Innenlevel sind.
Du kannst die Terrains als Heightmap erstellen, und dann halt beliebig Objekt darauf stellen, Gegner laufen lassen ect.

Das mit der Terrainhöhe gehört zu den Todos für das nächste Release.
(Sorry, im Moment muss man das noch per Hand machen, und aus der Heightmap auslesen.... was ungenau ist...)

Klippen und Steilhänge sind auch in Games meist eigene Mehes, die auf das Terrain gestellt werden....

Gruß,

Mike

Verfasst: 01.02.2007 19:33
von Vermilion
Hatte ich mir auch schon überlegt mit Klippen Meshes...

Verdammt! <) Dann muss ich noch warten... denn die Funktion brauche ich auf jeden Fall, wenn ich drüberlatschen will, natürlich mit einer gewissen Genauigkeit der Höhe, damit das nicht so seltsam aussieht.

Ein anderes Beispiel wären die Maps bzw. einzige große Map von World Of Warcraft.

Naja, ok, solang es von "TerrainHeight" in Irrlicht nichts neues gibt, beschäftige ich mich anderweitig... :)

Verfasst: 01.02.2007 19:42
von Kaeru Gaman
> (Sorry, im Moment muss man das noch per Hand machen, und aus der Heightmap auslesen.... was ungenau ist...)

öhm.. wieso sollte es ungenau sein, aus der heightmap auszulesen?

Verfasst: 01.02.2007 21:50
von neotoma
Kaeru Gaman hat geschrieben:> (Sorry, im Moment muss man das noch per Hand machen, und aus der Heightmap auslesen.... was ungenau ist...)

öhm.. wieso sollte es ungenau sein, aus der heightmap auszulesen?
Naja, die positionen zwischen den Pixeln (die als vertex umgewandelt werden, sind numal meist schräg.... und so muss man sich die position
selbst aus demn umliegenden Punkten interpolieren.

Mike

Verfasst: 02.02.2007 14:44
von Kaeru Gaman
achso, das meinst du.....

aber im grunde wäre es also kein problem, die vier nächsten punkte aus der
Heightmap zu nehmen und die höhe an einem punkt dazwischen exakt zu errechnen.
bräuchte man imho sogar nur ein paar dreisätze, keine komplexen winkelfunktionen...

Verfasst: 03.02.2007 20:00
von Vermilion
:mrgreen: Cool... kann mir jemand sagen, wie ich das mache? :mrgreen:
Ich bin zu blöd dafür. /:-> Zumindest kann ich mir nicht vorstellen, was ich da rechnen soll und wie ich z.B. die nächstgelegenen Punkte feststelle.

Verfasst: 04.02.2007 00:12
von Kaeru Gaman
nuja... ich kenn mich mir dem irrlicht-wrapper (noch) nicht aus,
also kann ich dir nur theoretische hinweise geben.

dein Terrain hat eine gewisse größe in Game-koordinaten,
und eine gewisse größe in der HeightMap.

also, nehmen wir mal an, du machst eine 10.000² Landschaft auf ner 1000² heightmap.
das heißt, mit EntityX / 10 bekommst du eine koordinate auf der heightmap.

(folgendes wenn Y die höhenkoordinate ist. bei OGRE liegt die Map in X zu Z, und Y ist die höhe)
wenn jetzt EntityX = 425 ist, und EntityZ = 375 ist,
sitzt die Entity genau in der mitte von vier punkten,
nach HeightMap(X,Z) sind das
HeightMap(42,37) und HeightMap(43,37) nordseite und
HeightMap(42,38) und HeightMap(43,38) südseite des umfassenden Quadrats.
diese Vier höhen nimmst du, um die höhe des punktes in der mitte zu ermitteln.
Bild
die zeichnung ist jetzt für die genaue mitte.
du ermittelst die mittlere höhe der nordseite, die mittlere höhe der südseite,
dann das mittel dieser beiden höhen, und da ist die höhe des mittelpunktes des quadrats.

für andere teilstrecken ist es halt nich genau die mitte, aber die rechnung ist genauso einfach.
....ich hoff mal, das hat ein bissel geholfen... das ist fast schwieriger zu erklären als zu rechnen... ;)

Verfasst: 04.02.2007 20:16
von Vermilion
Also das Bild hat mir am meißten geholfen! <) Zumindest am schnellsten. Ich habe gerade diesen Text 3 mal neu verfassen müssen, da mir alles erst nacheinander klar wurde! <)
Aber trotzdem hab ich noch eine Frage: Wie lese ich denn jetzt die Höhe in der Heightmap (Beispiel: "Karte.bmp") aus? Einfach den Schwarz-Weiß RGB-Wert des Pixels bestimmten?

Verfasst: 04.02.2007 20:20
von Kaeru Gaman
wie gesagt
Kaeru Gaman hat geschrieben:ich kenn mich mir dem irrlicht-wrapper (noch) nicht aus,
also kann ich dir nur theoretische hinweise geben.
schau mal ob irrlicht ne spezielle function hat um auf die heightmap zuzugreifen.
wenn du sie als bmp übergeben hast, müsste das auch per farbe gehen,
aber sie muss ja irgendwo als heightmap im speicher stehen,
dort per pointer zugreifen wär praktischer.