Du bist nicht angemeldet.

JuKu

Profi

  • »JuKu« ist der Autor dieses Themas

Beiträge: 574

Registrierungsdatum: 29.09.2011

Danksagungen: 48

  • Private Nachricht senden

1

10.01.2014, 21:25

3. Der Assetmanager

Der Assetmanager verwaltet alle Modelle, Texturen, Materialien usw., also Dateien die während des Spiels geladen werden müssen.
Dazu gibt es einen Ordner assets, indem alle Modelle, Texturen, Materialien liegen.

Zitat


MyGame/assets/
MyGame/assets/Interface/
MyGame/assets/MatDefs/
MyGame/assets/Materials/
MyGame/assets/Models/ <-- your .j3o models go here
MyGame/assets/Scenes/
MyGame/assets/Shaders/
MyGame/assets/Sounds/ <-- your audio files go here
MyGame/assets/Textures/ <-- your textures go here
MyGame/build.xml <-- Default Ant build script
MyGame/src/... <-- your Java sources go here
MyGame/...

Quelle: jMonkeyEngine

Der Assetmanager kümmert sich auch um das Laden von den Texturen, Modellen, Materialien usw., deshalb ist die Variable assetManager bereits vordefiniert, diese bekommt die Klasse von der SimpleApplication Klasse vererbt.

Was ist ein Model?
Ein Model in einem 3D Spiel ist ein Mesh, also lediglich die Form des Objekts.
Solche Model in einem 3D Spiel kann man z.B. mit Google Sketchup erstellen, muss diese dann aber also OgreXML exportieren, da die jMonkeyEngine mit dem Model sonst nichts anfangen kann.
Diese Dateien müssen also die Endung .mesh.xml, .scene, .material oder .skeleton.xml haben.
Folgender Code lädt ein Model aus dem Ordner assets/Models.

Java-Quelltext

1
2
3
// Load a model from test_data (OgreXML + material + texture)
Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.mesh.xml");
rootNode.attachChild(ninja);


In diesem Model ist das Material und die Texture bereits enthalten oder stehen mit da drin.

Was sind Texturen?
Texturen sind Bilder, die auf das Model im 3D Spiel gelegt werden.
Dadrauf kann z.B. das Muster einer Wand zu sehen sein usw., die dann wie bei einem Würfel über das Model im 3D Spiel gefaltet werden.
Folgender Code lädt erstellt eine Box, setzt ein Material, dass die jMonkeyEngine bereits vorgibt und lädt dann die Texturen.

Java-Quelltext

1
2
3
4
5
6
7
8
9
10
// Create a wall with a simple texture from test_data
Box box = new Box(Vector3f.ZERO, 2.5f,2.5f,1.0f);
Spatial wall = new Geometry("Box", box );
Material mat_brick = new Material( 
    assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat_brick.setTexture("ColorMap", 
    assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"));
wall.setMaterial(mat_brick);
wall.setLocalTranslation(2.0f,-2.5f,0.0f);
rootNode.attachChild(wall);


Dieses Beispiel von der jMonkeyEngine Seite zeigt, wie man Texturen lädt.
Wichtig dabei ist folgende Zeile.

Java-Quelltext

1
2
mat_brick.setTexture("ColorMap", 
    assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"));


Die Ordner, die mit Common anfangen, gibt die jMonkeyEngine bereits vor, darunter auch dieses Material, das oben verwendet wurde.

Assets nachladen
Die jMonkeyEngine besitzt ebenfalls eine Methode, um Assets aus einem Zip Archiv, also einem Zip Archiv mit z.B. Materialien usw., zu laden.
Dazu muss man dieses Zip Archiv angeben, damit die jMonkeyEngine z.B. die Materialien auch aus dem Zip Archiv lädt.

Java-Quelltext

1
2
3
assetManager.registerLocator("town.zip", ZipLocator.class);
    Spatial scene = assetManager.loadModel("main.scene");
    rootNode.attachChild(scene);


Zitat


Here is a HttpZipLocator that can download zipped models and load them:

assetManager.registerLocator(
"http://jmonkeyengine.googlecode.com/files/wildhouse.zip",
HttpZipLocator.class);
Spatial scene = assetManager.loadModel("main.scene");
rootNode.attachChild(scene);

Quelle: jMonkeyEngine

Es gibt also auch eine Möglichkeit, diese über HTTP zu laden, wobei das Laden über HTTP nicht immer die besten Variante ist.

Das wars erstmal zum Assetmanager, seid gespannt, über was ich als nächstes schreibe!
Wenn euch mein Beitrag weitergeholfen hat, drückt auf "Bedanken"!
Danke! :D

Es hat sich bereits 1 registrierter Benutzer bedankt.

Benutzer, die sich für diesen Beitrag bedankt haben:

Patrick (10.01.2014)

Erik

Profi

Beiträge: 1 274

Registrierungsdatum: 22.06.2011

Wohnort: Deutschland ;)

Danksagungen: 307

  • Private Nachricht senden

2

10.01.2014, 21:56

Gutes tutorial wieder :)

Aber eine Frage, warum werden die Spatials als Spatial deklariert und nicht mit iherer eigentlichen Klasse? Dann kann man ja ohne casten nicht mehr auf neue Funktionen zugreifen, aber hat davon irgenwie keinen Vorteil, oder?!

Und zum verständnis, wo kommen die uv-koords für die texturen her? sind die in der mesh datei mit drinn wie ist das?!
EDIT: ok, könnte sein, dass die ggf. in einer .material sind, wenn man so darüber nachdenkt :D
Beste Webite im Internet ( ͡° ͜ʖ ͡°)
xinra.de