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"
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"
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)