Mal was anderes, aber nichts neues: Der tausendste Loader für OBJ-Dateien.
Die Library liegt unter https://github.com/javagl/Obj und ist demnächst auch unter
<dependency>
<groupId>de.javagl</groupId>
<artifactId>obj</artifactId>
<version>0.2.0</version>
</dependency>
verfügbar.
Einige mag vielleicht die ungewöhnlich hohe Versionsnummer irritieren: 0.2.0!!! Das liegt daran, dass eine frühere Version schonmal unter javagl.de - Utilities lag (die wurde jetzt aber gekickt).
Eines der Ziele dieser Library war es, es möglichst leicht zu machen, eine OBJ-Datei zu laden, und so aufzubereiten, dass die darin enthaltenen Daten mit OpenGL gerendert werden können. Das schließt einige Schritte mit ein:
- Die Eingabedaten müssen trianguliert werden
- Man muss dafür sorgen, dass Textur- und Normalen-Indizies in bezug auf die Vertices eindeutig sind
- Das ganze muss „single indexed“ werden - so dass man auf die Texturkoordinaten und Normalen mit den gleichen Indizes zugreifen kann, wie auf die Vertices
- Man muss sich die ganzen Daten als (direct!) Buffers abholen können
Die ersten drei Punkte sind in einer convertToRenderable
-Methode zusammengefasst, und für die Buffers gibt es auch Utilities. D.h. mit wenigen Zeilen Code…
FileInputStream inputStream = new FileInputStream("buddha.obj");
Obj obj = ObjUtils.convertToRenderable(
ObjReader.read(inputStream));
IntBuffer indices = ObjData.getFaceVertexIndices(obj);
FloatBuffer vertices = ObjData.getVertices(obj);
FloatBuffer normals = ObjData.getNormals(obj);
… bekommt man die Buffer, die man zum Rendern braucht: