def read_textures(self, reader: ByteIO): self.textures = [ reader.read_ascii_string() for _ in range(self.texture_count) ] if self.shaders: print('Textures:') for s in self.shaders: print('\t texture:', s)
def read_shaders(self, reader: ByteIO): self.shaders = [ reader.read_ascii_string() for _ in range(self.shader_count) ] if self.shaders: print('Shaders:') for s in self.shaders: print('\t shader:', s)
def read_vertexes(self, reader: ByteIO): for i in range(self.vertex_count): vertex_entry = reader.tell() vertex = RIPVertex() for attrib in self.attributes: reader.seek(vertex_entry + attrib.offset) if attrib.name == RIPAttrTypes.POSITION: vertex.pos.read(reader, attrib.types) elif attrib.name == RIPAttrTypes.NORMAL: vertex.norm.read(reader, attrib.types) elif attrib.name == RIPAttrTypes.BINORMAL: vertex.binorm.read(reader, attrib.types) elif attrib.name == RIPAttrTypes.TEXCOORD: vertex.UV.append(RIPVarVector().read(reader, attrib.types)) elif attrib.name == RIPAttrTypes.COLOR: vertex.color.read(reader, attrib.types) elif attrib.name == RIPAttrTypes.TANGENT: reader.skip(attrib.size) elif attrib.name == RIPAttrTypes.BLENDINDICES: vertex.blend.read(reader, attrib.types) elif attrib.name == RIPAttrTypes.BLENDWEIGHT: vertex.blendweight.read(reader, attrib.types) else: print( 'Found "{}" unknown attribute! Please report about this' .format(attrib.name)) reader.seek(vertex_entry + self.vertex_size) self.vertexes.append(vertex)
def read(self, reader: ByteIO): self.name = reader.read_ascii_string().upper() self.index = reader.read_uint32() self.offset = reader.read_uint32() self.size = reader.read_uint32() self.type_map_elements = reader.read_uint32() self.types = [ reader.read_uint32() for _ in range(self.type_map_elements) ] return self
def read(self, reader: ByteIO): self.magic = reader.read_uint32() self.magic_s = "%X" % self.magic self.version = reader.read_uint32() self.face_count = reader.read_uint32() self.vertex_count = reader.read_uint32() self.vertex_size = reader.read_uint32() self.texture_count = reader.read_uint32() self.shader_count = reader.read_uint32() self.attrib_count = reader.read_uint32() self.read_attributes(reader) self.read_textures(reader) self.read_shaders(reader) self.read_indexes(reader) self.read_vertexes(reader)
def __init__(self, filepath): self.reader = ByteIO(path=filepath) print("Impotring", os.path.basename(filepath)) self.header = RIPHeader()
def read_indexes(self, reader: ByteIO): self.indexes = [(reader.read_uint32(), reader.read_uint32(), reader.read_uint32()) for _ in range(self.face_count)]
def read(self, reader: ByteIO, types): fmt = ''.join([tt.get(f, "L") for f in types]) self.values = list(reader.read_fmt(fmt)) return self
def read(self, reader: ByteIO): self.x, self.y, _, _ = reader.read_fmt('ffff') return self
def read(self, reader: ByteIO): self.x, self.y, self.z = reader.read_fmt('III') return self