|
| 1 | +import numpy |
1 | 2 | from .base import SceneLoader |
| 3 | +import pywavefront |
| 4 | + |
| 5 | +from OpenGL import GL |
| 6 | +from OpenGL.arrays.vbo import VBO |
| 7 | +from demosys.opengl import VAO |
| 8 | +from demosys.scene import Mesh, Node |
2 | 9 |
|
3 | 10 |
|
4 | 11 | class ObjLoader(SceneLoader): |
5 | 12 | """Loade obj files""" |
6 | 13 | file_extensions = ['.obj'] |
7 | 14 |
|
8 | 15 | def __init__(self, file_path): |
9 | | - self.path = path |
10 | 16 | super().__init__(file_path) |
11 | 17 |
|
12 | 18 | def load(self, scene, file=None): |
13 | | - print(scene, file) |
| 19 | + """Deferred loading""" |
| 20 | + data = pywavefront.Wavefront(file) |
| 21 | + |
| 22 | + for mesh in data.mesh_list: |
| 23 | + for mat in mesh.materials: |
| 24 | + vbo = VBO(numpy.array(mat.vertices, dtype=numpy.dtype(numpy.float32))) |
| 25 | + |
| 26 | + vao = VAO("moo", mode=GL.GL_TRIANGLES) |
| 27 | + vao.add_array_buffer(GL.GL_FLOAT, vbo) |
| 28 | + vao.map_buffer(vbo, "in_uv", 2) |
| 29 | + vao.map_buffer(vbo, "in_normal", 3) |
| 30 | + vao.map_buffer(vbo, "in_position", 3) |
| 31 | + vao.build() |
| 32 | + |
| 33 | + mesh = Mesh("moo", vao=vao) |
| 34 | + scene.meshes.append(mesh) |
| 35 | + node = Node(mesh=mesh) |
| 36 | + scene.root_nodes.append(node) |
| 37 | + |
14 | 38 | return scene |
0 commit comments