Exemplo n.º 1
0
    def __init__(self, size):
        super().__init__(size)
        self.title = 'Projekt: Godsword'
        self.pan = Pan()
        self.rotate = Rotate()
        self.zoom = Zoom()

        self.loader = OBJMTLLoader()
        self.blocks = dict(
            (mat.value.tex, mat.value) for mat in enums.Material)

        self.vec = np.array([0, 0, 1])
        self.t = 0
        '''
Exemplo n.º 2
0
    def build(self):
        root = FloatLayout()
        self.renderer = Renderer()
        scene = Scene()
        camera = PerspectiveCamera(15, 1, 1, 1000)
        # load obj file
        loader = OBJMTLLoader()
        obj_path = os.path.join(os.path.dirname(__file__), "./testnurbs.obj")
        obj = loader.load(obj_path, "./testnurbs.mtl")

        scene.add(*obj.children)
        for obj in scene.children:
            obj.pos.z = -20

        self.renderer.render(scene, camera)
        root.add_widget(self.renderer)
        self.renderer.bind(size=self._adjust_aspect)
        return root
Exemplo n.º 3
0
    def build(self):
        root = FloatLayout()
        self.renderer = Renderer(shader_file=shader_file)
        scene = Scene()
        camera = PerspectiveCamera(15, 1, 1, 1000)
        loader = OBJMTLLoader()
        obj = loader.load(obj_file, mtl_file)

        scene.add(*obj.children)
        for obj in scene.children:
            obj.pos.z = -20.

        self.renderer.render(scene, camera)
        self.orion = scene.children[0]

        root.add_widget(self.renderer)
        self.renderer.bind(size=self._adjust_aspect)
        Clock.schedule_interval(self._rotate_obj, 1 / 20)
        return root
Exemplo n.º 4
0
    def build(self):
        root = FloatLayout()
        self.renderer = Renderer(shader_file=shader_file)
        scene = Scene()
        camera = PerspectiveCamera(15, 1, 1, 1000)
        loader = OBJMTLLoader()
        obj = loader.load(obj_file, mtl_file)

        scene.add(*obj.children)
        for obj in scene.children:
            obj.pos.z = -20.

        self.renderer.render(scene, camera)
        self.orion = scene.children[0]

        root.add_widget(self.renderer)
        self.renderer.bind(size=self._adjust_aspect)
        Clock.schedule_interval(self._rotate_obj, 1 / 20)
        return root
Exemplo n.º 5
0
    def build(self):
        self.look_at = Vector3(0, 0, -1)
        root = FloatLayout()
        self.renderer = Renderer(shader_file=shader_file)
        scene = Scene()
        self.camera = PerspectiveCamera(75, 1, 1, 1000)
        self.camera.pos.z = 5
        loader = OBJMTLLoader()
        obj = loader.load(obj_file, mtl_file)
        self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
        self._keyboard.bind(on_key_down=self._on_keyboard_down)

        scene.add(*obj.children)

        self.renderer.render(scene, self.camera)
        self.orion = scene.children[0]

        root.add_widget(self.renderer)
        self.renderer.bind(size=self._adjust_aspect)
        Clock.schedule_interval(self._rotate_obj, 1 / 20)
        return root
Exemplo n.º 6
0
    def build(self):
        self.look_at = Vector3(0, 0, -1)
        root = FloatLayout()
        self.renderer = Renderer(shader_file=shader_file)
        scene = Scene()
        self.camera = PerspectiveCamera(75, 1, 1, 1000)
        self.camera.pos.z = 5
        loader = OBJMTLLoader()
        obj = loader.load(obj_file, mtl_file)
        self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
        self._keyboard.bind(on_key_down=self._on_keyboard_down)

        scene.add(*obj.children)

        self.renderer.render(scene, self.camera)
        self.orion = scene.children[0]

        root.add_widget(self.renderer)
        self.renderer.bind(size=self._adjust_aspect)
        Clock.schedule_interval(self._rotate_obj, 1 / 20)
        return root
Exemplo n.º 7
0
class MyApp(Application):
    def __init__(self, size):
        super().__init__(size)
        self.title = 'Projekt: Godsword'
        self.pan = Pan()
        self.rotate = Rotate()
        self.zoom = Zoom()

        self.loader = OBJMTLLoader()
        self.blocks = dict(
            (mat.value.tex, mat.value) for mat in enums.Material)

        self.vec = np.array([0, 0, 1])
        self.t = 0
        '''
        super(Mesh, self).__init__(**kw)
        self.geometry = geometry
        self.material = material
        self.mtl = self.material  # shortcut for material property
        self.vertex_format = kw.pop("vertex_format", DEFAULT_VERTEX_FORMAT)
        self.create_mesh()
        '''

    def cube(self, tile):
        DEFAULT_VERTEX_FORMAT = [(b'v_tc0', 2, 'float'),
                                 (b'v_normal', 3, 'float'),
                                 (b'v_pos', 3, 'float')]

        obj = self.blocks[tile].obj
        T()
        obj = pywave.Wavefront('tex/block.obj', collect_faces=True)
        material = obj.materials['grass']
        cube = obj.meshes['Cube']

        vertices = obj.vertices
        faces = cube.faces
        grass = obj.materials['grass']
        dirt = obj.materials['dirt']
        vertices = grass.vertices + dirt.vertices
        #indices  = np.array(faces).ravel().tolist()
        indices = np.arange(36).astype(int).tolist()
        #vertices = np.array(vertices).ravel().tolist()

        tex = Image('tex/grass.png').texture
        mat = Material(tex)
        kw = {
            "vertices": vertices,
            "indices": indices,
            "fmt": DEFAULT_VERTEX_FORMAT,
            "mode": "triangles",
            'texture': tex
        }
        #if self.material.map:
        #     kw["texture"] = self.material.map

        mesh = KivyMesh(**kw)

        class Meshy(Object3D):
            def __init__(self, mesh, material):
                super().__init__()
                self._mesh = mesh
                self.material = material
                self.mtl = material
                self.vertex_format = DEFAULT_VERTEX_FORMAT

        cube = Meshy(mesh, tex)

        #cube.material = orig.material
        #cube.geometry = orig.geometry
        orig._mesh = cube._mesh
        orig.material = mat
        cube = orig

        #cube = kivy3.Mesh([], material)
        if tile == 'lava':
            cube.pos.y = -0.5
        elif tile == 'stone':
            cube.pos.y = 1
        elif tile == 'grass':
            pass
        elif tile == 'forest':
            pass
        elif tile == 'water':
            cube.pos.y = -0.33

        #cube.material.color = 0., .7, 0.  # green
        #cube.material.diffuse = 0., .7, 0.  # green
        return cube

    def makeMap(self):
        tiles = loadTiled('../Projekt-Godsword/resource/maps/map1/map.tmx')
        n, sz = tiles.shape[0], 1
        for i in range(n):
            for j in range(n):
                tile = tiles[i, j]
                cube = self.cube(tile)
                self.scene.add(cube)

                #NEVER set cube.pos directly.
                #It won't do anything
                cube.pos.x = i - n // 2 + sz // 2
                cube.pos.z = j - n // 2 + sz // 2

    def glSetup(self):
        #gl.glEnable(gl.GL_CULL_FACE)
        #gl.glCullFace(gl.GL_BACK)
        pass

    def build(self):
        camera = PerspectiveCamera(30, 1, 1, 1000)
        self.renderer = Renderer()
        self.scene = Scene()
        root = FloatLayout()

        obj = self.loader.load('tex/nn.obj', 'tex/nn.mtl')
        self.scene.add(obj)
        obj.pos.y = 1
        self.makeMap()

        self.renderer.render(self.scene, camera)
        self.renderer.camera.look_at(0, 0, 0)
        root.add_widget(self.renderer)
        root.add_widget(self.pan)
        root.add_widget(self.rotate)
        root.add_widget(self.zoom)
        self.renderer.bind(size=self._adjust_aspect)
        self.loop(self.update)
        return root

    def update(self, t):
        print(1 / t)
        self.t += t
        rad = 80
        sz = 500
        pi = 3.14159265

        r = self.rotate
        x = r.x + r.xVol
        y = r.y + r.yVol

        x = x / sz
        y = y / sz
        yclip = np.clip(y, -pi / 2, 0)

        xz_x = np.cos(x)
        xz_z = np.sin(x)

        yz_y = np.cos(yclip)
        yz_z = np.sin(yclip)

        xz = np.array([[xz_x, 0, -xz_z], [0, 1, 0], [xz_z, 0, xz_x]])

        yz = np.array([[1, 0, 0], [0, yz_y, -yz_z], [0, yz_z, yz_y]])

        #Find cylindrical xz plane rotation
        rot_xz = rad * np.dot(xz, self.vec)
        xx, _, zz = rot_xz
        xz_vec = np.array([xx, 0, zz])

        #Find spherical yz plane rotation
        _, yy, zn = np.dot(yz, self.vec)
        xz_norm = zn

        #For x, z: shrink to position of spherical rotation
        #For y: use height from spherical rotation
        vec = np.array([xx * xz_norm, -rad * yy, zz * xz_norm])

        #Zoom factor
        zoom = Zoom.clipZoom(self.zoom.zoom)
        vec = vec * zoom

        p = self.pan
        x = p.x + p.xVol
        z = p.y + p.yVol

        x = 10 * x / sz
        z = -10 * z / sz

        #Horizontal component
        unit_y = np.array([0, 1, 0])
        xx, _, zz = np.cross(rot_xz, unit_y)
        norm = np.sqrt(xx**2 + zz**2)
        xh, zh = x * xx / norm, x * zz / norm

        #Depth component
        xx, _, zz = -xz_vec
        norm = np.sqrt(xx**2 + zz**2)
        xd, zd = z * xx / norm, z * zz / norm

        xx, yy, zz = vec
        vec = np.array([xx + xh + xd, yy, zz + zh + zd])
        self.renderer.camera.look_at([-xh - xd, 0, -zh - zd])
        self.renderer.camera.pos = vec.tolist()

    def _adjust_aspect(self, inst, val):
        rsize = self.renderer.size
        aspect = rsize[0] / float(rsize[1])
        self.renderer.camera.aspect = aspect