Ejemplo n.º 1
0
    def test_usage(self):
        mesh = osd.Topology(faces)
        mesh.boundaryMode = osd.BoundaryMode.EDGE_ONLY

        mesh.vertices[0].sharpness = 2.7
        self.assertAlmostEqual(mesh.vertices[0].sharpness, 2.7)

        self.assertEqual(len(mesh.vertices), len(verts) / len(dtype))
        self.assertEqual(len(mesh.faces), len(faces))
        self.assertEqual(len(mesh.faces[0].edges), len(faces[0]))

        mesh.finalize()

        subdivider = osd.Subdivider(
            mesh,
            vertexLayout = dtype,
            indexType = np.uint32,
            levels = 4)

        subdivider.setCoarseVertices(verts, np.float32)
        subdivider.refine()

        numQuads = len(subdivider.getRefinedQuads()) / 4
        numVerts = len(subdivider.getRefinedVertices()) / len(dtype)

        self.assertEqual(numQuads, 1536, "Unexpected number of refined quads")
        self.assertEqual(numVerts, 2056, "Unexpected number of refined verts")
Ejemplo n.º 2
0
 def updateTopo(numLevels=4):
     global subdivider
     topo.reset()
     topo.finalize()
     subdivider = osd.Subdivider(topo,
                                 vertexLayout=dtype,
                                 indexType=np.uint32,
                                 levels=numLevels)
     quads = subdivider.getRefinedQuads()
     renderer.updateIndicesVbo(quads)
Ejemplo n.º 3
0
def main():

    app = QtGui.QApplication(sys.argv)
    renderer = Renderer()
    win = Window(renderer)
    win.raise_()

    verts = [
        0.0,
        -1.414214,
        1.0,  # 0
        1.414214,
        0.0,
        1.0,  # 1
        -1.414214,
        0.0,
        1.0,  # 2
        0.0,
        1.414214,
        1.0,  # 3
        -1.414214,
        0.0,
        -1.0,  # 4
        0.0,
        1.414214,
        -1.0,  # 5
        0.0,
        -1.414214,
        -1.0,  # 6
        1.414214,
        0.0,
        -1.0
    ]  # 7

    verts = np.array(verts, np.float32).reshape((-1, 3))

    faces = [
        (0, 1, 3, 2),  # 0
        (2, 3, 5, 4),  # 1
        (4, 5, 7, 6),  # 2
        (6, 7, 1, 0),  # 3
        (1, 7, 5, 3),  # 4
        (6, 0, 2, 4)
    ]  # 5

    topo = osd.Topology(faces)
    topo.boundaryMode = osd.BoundaryMode.EDGE_ONLY
    for v in (2, 3, 4, 5):
        topo.vertices[v].sharpness = 2.0
    for e in xrange(4):
        topo.faces[3].edges[e].sharpness = 3
    topo.finalize()

    subdivider = osd.Subdivider(topo,
                                vertexLayout='f4, f4, f4',
                                indexType=np.uint32,
                                levels=4)
    subdivider.setCoarseVertices(verts)
    subdivider.refine()
    inds = subdivider.getRefinedQuads()
    renderer.updateIndicesVbo(inds)

    def animateVerts():
        from time import time
        import math
        t = 4 * time()
        t = 0
        t = 0.5 + 0.5 * math.sin(t)
        t = 0.25 + t * 0.75
        a = np.array([0.0, -1.414214, 1.0])
        b = np.array([1.414214, 0.0, 1.0])
        c = np.array([0.0, -1.414214, -1.0])
        d = np.array([1.414214, 0.0, -1.0])
        center = (a + b + c + d) / 4
        center = np.multiply(center, 1 - t)
        verts[0] = center + np.multiply(a, t)
        verts[1] = center + np.multiply(b, t)
        verts[6] = center + np.multiply(c, t)
        verts[7] = center + np.multiply(d, t)

    def updateAnimation():
        animateVerts()
        subdivider.setCoarseVertices(verts)
        subdivider.refine()
        pts = subdivider.getRefinedVertices()
        renderer.updatePointsVbo(pts)

    updateAnimation()
    renderer.drawHook = updateAnimation
    retcode = app.exec_()
    sys.exit(retcode)