Esempio n. 1
0
    def write(self, file_name):
        fo = open(file_name, "wb")
        if fo == 0:
            print "unable to open file ", file_name
            return

        out = bin_data()
        out.add_data("nya anim")
        out.add_uint(1)  #version

        out.add_uint(len(self.bones))

        for b in self.bones:
            out.add_string(b.name)
            out.add_uchar(b.type)
            out.add_uint(len(b.frames))

            if b.type == 10:
                for f in b.frames:
                    out.add_uint(f.time)
                    out.add_float(f.pos.x)
                    out.add_float(f.pos.y)
                    out.add_float(f.pos.z)
            elif b.type == 20:
                for f in b.frames:
                    out.add_uint(f.time)
                    out.add_float(f.rot.v.x)
                    out.add_float(f.rot.v.y)
                    out.add_float(f.rot.v.z)
                    out.add_float(f.rot.w)

        fo.write(out.data)

        print "saved animation: ", file_name
        print "file size: ", len(out.data) / 1024, "kb"
Esempio n. 2
0
    def write(self,file_name):
        fo = open(file_name,"wb")
        if fo == 0:
            print "unable to open file ", file_name
            return

        out = bin_data()
        out.add_data("nya anim")
        out.add_uint(1) #version

        out.add_uint(len(self.bones))

        for b in self.bones:
            out.add_string(b.name)
            out.add_uchar(b.type)
            out.add_uint(len(b.frames))

            if b.type == 10:
                for f in b.frames:
                    out.add_uint(f.time)
                    out.add_float(f.pos.x)
                    out.add_float(f.pos.y)
                    out.add_float(f.pos.z)
            elif b.type == 20:
                for f in b.frames:
                    out.add_uint(f.time)
                    out.add_float(f.rot.v.x)
                    out.add_float(f.rot.v.y)
                    out.add_float(f.rot.v.z)
                    out.add_float(f.rot.w)

        fo.write(out.data)

        print "saved animation: ", file_name
        print "file size: ", len(out.data)/1024, "kb"
Esempio n. 3
0
    def write(self,file_name):
        f = open(file_name,"wb")
        if f == 0:
            print "unable to open file ", file_name
            return

        out = bin_data()
        out.add_data("nya mesh")
        out.add_uint(1) #version ToDo: version 2
        chunks_count = 1

        mat_count = len(self.materials)
        jcount = len(self.joints)

        if mat_count:
            chunks_count += 1;
        if jcount:
            chunks_count += 1;

        out.add_uint(chunks_count)

        #---------------- mesh data -----------------

        buf = bin_data()

        for i in range(6): #ToDo: aabb
            buf.add_float(0)

        atr_count = len(self.vert_attr)
        buf.add_uchar(atr_count)
        for a in self.vert_attr:
            buf.add_uchar(a.type)
            buf.add_uchar(a.dimension)
            buf.add_string(a.semantics)

        buf.add_uint(self.vcount)
        buf.add_floats(self.verts_data)

        icount = len(self.indices)
        if icount>65535:
            buf.add_uchar(4) #uint indices
            buf.add_uint(icount)
            buf.add_uints(self.indices)
        elif icount>0:
            buf.add_uchar(2) #ushort indices
            buf.add_uint(icount)
            buf.add_ushorts(self.indices)
        else:
            buf.add_uchar(0) #no indices

        groups_count = len(self.groups)
        buf.add_ushort(1) #lods count
        buf.add_ushort(groups_count)
        for g in self.groups:
            buf.add_string(g.name)
            for j in range(6):
                buf.add_float(0)
            buf.add_ushort(g.mat_idx)
            buf.add_uint(g.offset)
            buf.add_uint(g.count)

        out.add_uint(0) #mesh
        out.add_uint(len(buf.data))
        out.data += buf.data

        #-------------- materials data ---------------

        if mat_count > 0:
            buf = bin_data()
            buf.add_ushort(mat_count)
            for m in self.materials:
                buf.add_string(m.name)
                buf.add_ushort(len(m.textures))
                for tex in m.textures:
                    buf.add_string(tex.name)
                    buf.add_string(tex.value)

                params=m.params
                buf.add_ushort(len(params))
                for p in params:
                    buf.add_string(p.name)
                    buf.add_string(p.value)

                vec_params=m.vec_params
                buf.add_ushort(len(vec_params))
                for p in vec_params:
                    buf.add_string(p.name)
                    buf.add_float(p.x)
                    buf.add_float(p.y)
                    buf.add_float(p.z)
                    buf.add_float(p.w)

                buf.add_ushort(0) #ToDo: integer params

            out.add_uint(2) #materials
            out.add_uint(len(buf.data))
            out.data += buf.data

        #-------------- skeleton data ---------------

        if jcount > 0:
            buf = bin_data()
            buf.add_uint(jcount)
            for i in range(jcount):
                buf.add_string(self.joints[i].name)

                buf.add_float(0.0) #ToDo: rot
                buf.add_float(0.0)
                buf.add_float(0.0)
                buf.add_float(1.0)

                buf.add_float(self.joints[i].pos_x)
                buf.add_float(self.joints[i].pos_y)
                buf.add_float(self.joints[i].pos_z)

                buf.add_int(self.joints[i].parent)

            out.add_uint(1) #skeleton
            out.add_uint(len(buf.data))
            out.data += buf.data

        f.write(out.data)