예제 #1
0
def mesh(vertices, normals, colours, triangles):

    # TODO: Make this name meaningful in some way
    name = 'test'

    v3n3c4 = GeomVertexFormat.get_v3n3c4()
    data = GeomVertexData(name, v3n3c4, Geom.UHStatic)
    data.set_num_rows(len(vertices))

    vertex_writer = GeomVertexWriter(data, 'vertex')
    normal_writer = GeomVertexWriter(data, 'normal')
    colour_writer = GeomVertexWriter(data, 'color')

    for vertex in vertices:
        vertex_writer.add_data3(*vertex)

    for normal in normals:
        normal_writer.add_data3(*normal)

    for colour in colours:
        colour_writer.add_data4(*colour)

    prim = GeomTriangles(Geom.UHStatic)

    for triangle in triangles:
        prim.add_vertices(*triangle)

    geom = Geom(data)
    geom.add_primitive(prim)

    node = GeomNode(name)
    node.add_geom(geom)

    return node
예제 #2
0
class PointMaker():
    def __init__(self, name):
        self.name = name
        self.new()

    def new(self):
        self.point = 0
        self.vdata = GeomVertexData(
        self.name, GeomVertexFormat.get_v3c4(), Geom.UHStatic)
        self.vdata.set_num_rows(2)
        self.vertex = GeomVertexWriter(self.vdata, 'vertex')
        self.color = GeomVertexWriter(self.vdata, 'color')
        self.prim = GeomPoints(Geom.UHStatic)

    def add(self, pos=(0,0,0), color=(1,1,1,1)):
        self.vertex.add_data3(pos[0],pos[1],pos[2]+0.02)
        self.color.add_data4(color)
        self.prim.add_vertex(self.point)
        self.point += 1

    def wrap_up(self):
        self.prim.close_primitive()
        geom = Geom(self.vdata)
        geom.add_primitive(self.prim)
        node = GeomNode('point')
        node.add_geom(geom)
        return NodePath(node)
예제 #3
0
파일: mesh.py 프로젝트: tcdude/thirty
class VertexArray(object):
    def __init__(self, name='Unnamed Shape'):
        self._name = name
        self._vert_data = GeomVertexData(
            self._name,
            GeomVertexFormat.get_v3n3c4t2(),
            Geom.UH_static
        )
        self._vert_writer = GeomVertexWriter(self._vert_data, 'vertex')
        self._norm_writer = GeomVertexWriter(self._vert_data, 'normal')
        self._color_writer = GeomVertexWriter(self._vert_data, 'color')
        self._tex_writer = GeomVertexWriter(self._vert_data, 'texcoord')
        self._prim = GeomTriangles(Geom.UH_static)

        self._v_id = 0

    def set_num_rows(self, num_rows):
        self._vert_data.set_num_rows(num_rows)

    def add_row(self, point, normal, color, tex):
        self._vert_writer.add_data3(point)
        self._norm_writer.add_data3(normal)
        self._color_writer.add_data4(color)
        self._tex_writer.add_data2(tex)
        self._v_id += 1
        return self._v_id - 1

    def add_triangle(self, va, vb, vc):
        self._prim.add_vertices(va, vb, vc)

    def get_node(self):
        geom = Geom(self._vert_data)
        geom.add_primitive(self._prim)
        node = GeomNode(self._name)
        node.add_geom(geom)
        return node