Tag 23 – 3D

veröffentlicht am: 23. Dezember 2012

day23Mit libgdx kann man auch 3D-Spiele erstellen. Allerdings wird hier noch kräftig dran gearbeitet, daher sollte man pures OpenGL verstehen.

Um ein einfaches Dreieck zu rendern, muss man ein neues Mesh erstellen und ihm die Positionen der drei Vertices an den Ecken mitgeben. Dieses Mesh kann man dann einfach rendern.

Mesh mesh;
mesh=new Mesh(true,3,3,new VertexAttribute(Usage.Position,3,"a_position"));
mesh.setVertices(new float[]{-0.5f, -0.5f, -1f,
	0.5f, -0.5f, -1f,
	0, 0.5f, -1f });   
mesh.setIndices(new short[] { 0, 1, 2 });   

Gdx.gl.glClearColor(0.25f, 0.25f, 0.25f,1f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
mesh.render(GL10.GL_TRIANGLES);

3d_1

Wenn man nun zwei Dreiecke erstellt und diese schräg hintereinander positioniert, sieht es so aus, als ständen sie ganz normal nebeneinander.

mesh=new Mesh(true,3,3,new VertexAttribute(Usage.Position,3,"a_position"));
mesh.setVertices(new float[]{-1.0f, -0.5f, 0f,
	0f, -0.5f, 0f,
	-0.5f, 0.5f, 0f });   
mesh.setIndices(new short[] { 0, 1, 2 });   
	
mesh2=new Mesh(true,3,3,new VertexAttribute(Usage.Position,3,"a_position"));
mesh2.setVertices(new float[]{-0.0f, -0.5f, -1f,
	1f, -0.5f, -1f,
	0.5f, 0.5f, -1f });  
mesh2.setIndices(new short[] { 0, 1, 2 });   

3d_2

Dies liegt daran, dass die Kamera noch eine orthographische Projektion vornimmt, die Objekte also nicht kleiner werden, wenn sie weiter in den Hintergrund rücken.
Für 3D gibt es natürlich als Gegenstück zur OrthographicCamera die PerspectiveCamera, die Perspektive in das Bild bringt.

@Override
public void resize(int width, int height) {
        float aspectRatio = (float) width / (float) height;
        camera = new PerspectiveCamera(67, aspectRatio, 1f);
}

camera.apply(Gdx.gl10);
Gdx.gl.glClearColor(0.25f, 0.25f, 0.25f,1f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    
mesh.render(GL10.GL_TRIANGLES);
mesh2.render(GL10.GL_TRIANGLES);

3d_3

Mit libgdx mitgeliefert ist auch ein ObjLoader, der obj-Dateien einliest (die man z.B. mit Blender erstellen kann).

In GitHub findet ihr dazu ein kleines Beispiel.

3d_4

Viel mehr kann ich leider noch nicht zu 3D sagen, da ich mich in letzter Zeit mehr mit 2D beschäftigt habe.

Von hier an solltest du lieber einem richtigen OpenGL Tutorial folgen (das dir so Sachen wie Shader usw erklärt).
https://github.com/mattdesl/lwjgl-basics/wiki

Da sich hier noch sehr viel ändert, sollte man zur Hilfe hauptsächlich die API nutzen.

geposted in libgdx

3 Antworten zu “Tag 23 – 3D”

  1. MrBarsack sagt:

    Good job! 🙂

  2. MrBarsack sagt:

    Huch, gibt ja auch eine deutsche Version, wieso merke ich das erst nach dem durchlesen? 😀

    Lese gerade deine Tutorialreihe, da ich gerade mit Libgdx arbeite. Hab zwar noch nicht alle bestehenden durchgelesen, würde mich trotzdem auch auf weitere freuen! 🙂

  3. ds897 sagt:

    Hey bitowl,
    Geile Idee der Adventskalender und sehr gutes Grundlagentutorial;)

    Hat mir sehr geholfen!!

    Danke dafür

    P.s. bald ist wieder Adventszeit^^

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.