def load_single_model(data, mdlList): '''Loads a single model. For testing purposes''' if rapi.checkFileExt(rapi.getInputName(), ".mbn"): bs = NoeBitStream(data) idstring = bs.readUInt() numFiles = bs.readUInt() bs.read('2L') filesizes = [] for i in range(numFiles): unk, size, crc, null = bs.read('4L') filesizes.append(size) for i in range(numFiles): size = filesizes[i] mdl = bs.readBytes(size) parser = mdl_parser(mdl) parser.parse_file() mdl = rapi.rpgConstructModel() mdl.setModelMaterials( NoeModelMaterials(parser.texList, parser.matList)) mdlList.append(mdl) elif rapi.checkFileExt(rapi.getInputName(), ".mdl"): parser = mdl_parser(data) parser.parse_file() mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdlList.append(mdl)
def load_single_model(data, mdlList): '''Loads a single model. For testing purposes''' if rapi.checkFileExt(rapi.getInputName(), ".mbn"): bs = NoeBitStream(data) idstring = bs.readUInt() numFiles = bs.readUInt() bs.read('2L') filesizes = [] for i in range(numFiles): unk, size, crc, null = bs.read('4L') filesizes.append(size) for i in range(numFiles): size = filesizes[i] mdl = bs.readBytes(size) parser = mdl_parser(mdl) parser.parse_file() mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdlList.append(mdl) elif rapi.checkFileExt(rapi.getInputName(), ".mdl"): parser = mdl_parser(data) parser.parse_file() mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdlList.append(mdl)
def get_directory_path(): dirPath = rapi.getDirForFilePath(rapi.getInputName()) if not dirPath: dirPath = os.path.dirname(os.path.abspath( rapi.getInputName())) + os.sep return dirPath
def parse_textures(self): basename = rapi.getExtensionlessName(self.filename) basepath = rapi.getDirForFilePath(rapi.getInputName()) Tex_Basename = basename.replace('Mesh', 'Tex') diffTex = basepath + Tex_Basename + "_diff.dds" normTex = basepath + Tex_Basename + "_norm.dds" specTex = basepath + Tex_Basename + "_spec.dds" if rapi.checkFileExists(diffTex): material = NoeMaterial(basename + "_diffuse", diffTex) material.setFlags(noesis.NMATFLAG_TWOSIDED) self.TextureFiles.append('Diffuse: ' + diffTex) if (rapi.checkFileExists(normTex)): material.setNormalTexture(normTex) self.TextureFiles.append('Normal: ' + normTex) if (rapi.checkFileExists(specTex)): material.setSpecularTexture(specTex) self.TextureFiles.append('Specular: ' + specTex) self.matList.append(material) # Read Textures Block if self.TextureFilesCnt > 0: for i in range(self.TextureFilesCnt): TexFile = self.inFile.readString() TexFilePath = rapi.getDirForFilePath( rapi.getInputName()) + "/" + TexFile if (rapi.checkFileExists(TexFilePath)): self.TextureFiles.append(TexFile) material = NoeMaterial('mat' + str(i), str(TexFile)) material.setFlags(noesis.NMATFLAG_TWOSIDED) self.matList.append(material)
def findMODL(self): fName = rapi.getInputName().split('\\')[-1] dirPath = rapi.getDirForFilePath(rapi.getInputName()) f = open(dirPath + "/" + fName, 'rb') file = f.read() f.close() offset = file.find(b"MODL") self.data.seek(offset)
def findMODL(self): fName=rapi.getInputName().split('\\')[-1] dirPath = rapi.getDirForFilePath(rapi.getInputName()) f = open(dirPath + "/" + fName,'rb') file = f.read() f.close() offset = file.find(b"MODL") self.data.seek(offset)
def noepyCheckType(data): fName=rapi.getInputName().split('\\')[-1] dirPath = rapi.getDirForFilePath(rapi.getInputName()) bs = open(dirPath + "/" + fName) idstring = line = bs.readline() idstring =''.join(idstring.split('\x00')) bs.close() if not "version" in idstring.lower() : return 0 return 1
def __init__(self, data): self.inFile = NoeBitStream(data) self.animList = [] self.texList = [] self.matList = [] self.boneList = [] self.dirpath = rapi.getDirForFilePath(rapi.getInputName()) self.basename = rapi.getExtensionlessName(rapi.getInputName())
def noepyLoadModel(data, mdlList): ctx = rapi.rpgCreateContext() global dirPath global fileName dirPath = rapi.getDirForFilePath(rapi.getInputName()) fileName = rapi.getLocalFileName(rapi.getInputName()) file = GOBJ(data) mdlList.append(file.mdl) rapi.rpgClearBufferBinds() return 1
def __init__(self): self.filename = rapi.getInputName().split('\\')[-1] self.dirPath = rapi.getDirForFilePath(rapi.getInputName()) self.matList = [] self.texList = [] self.bones = [] self.anims = [] self.GetMaterials() self.LoadModel() try:self.LoadArmature() except:print('Armature failed to init');pass
def __init__(self, data): '''Initialize some data. Refer to Sanae.py to see what is already initialized''' self.inFile = NoeBitStream(data) self.meshes = [] self.boneID = 0 self.animList = [] self.texList = [] self.matList = [] self.boneList = [] self.abspath = rapi.getInputName() self.dirpath = rapi.getDirForFilePath(rapi.getInputName())
def GetMaterial(self): fName=rapi.getInputName().split('\\')[-1][:-5] self.name = fName dirPath = rapi.getDirForFilePath(rapi.getInputName()) self.path = dirPath try: matFile = open(dirPath+"/"+fName+".material","r") while True: line = matFile.readline() #print(line) if "texture " in line: line=line.split(' ')[-1][:-5];print(line);return line except:print("[*] Material not found.", );return 0 print(fName)
def parse_textures(self, filename): try: dirpath = rapi.getDirForFilePath(rapi.getInputName()) f = open(dirpath + filename + ".tex", 'rb') data = f.read() bs = NoeBitStream(data) header = bs.readBytes(4) size, numTex, null = bs.read('3L') for i in range(numTex): texSize = bs.readUInt() texFmt = noeStrFromBytes(bs.readBytes(4)) if texFmt == "tex": texFmt = "dds" bs.read('2L') texName = noeStrFromBytes(bs.readBytes(32)) texData = bs.readBytes(texSize) tex = rapi.loadTexByHandler(texData, "." + texFmt) if tex is not None: tex.name = texName self.texList.append(tex) except: pass
def noepyLoadModel(data, mdlList): '''Build the model, set materials, bones, and animations. You do not need all of them as long as they are empty lists (they are by default)''' ctx = rapi.rpgCreateContext() filename = rapi.getLocalFileName(rapi.getInputName()) fileID = ''.join(c for c in filename if c.isdigit()) bs = NoeBitStream(data) idstring = bs.readUInt() idstring2 = bs.readUInt() if idstring == 1213416781: #MESH if idstring2 == 1: parser = StaticParser1(data) elif idstring2 == 2: parser = StaticParser2(data) else: parser = SanaeParser(data) print(idstring) parser.parse_file() mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdl.setBones(parser.boneList) mdl.setAnims(parser.animList) mdlList.append(mdl) return 1
def load_all_models(mdlList): '''Load all models''' #carry over from previous models matList = [] texList = [] ##load face #facePath = "E:\\My Documents\\Workspace\\sample\\Age of Wushu\\g_face.xmod" #f = open(facePath, 'rb') #data2 = f.read() #parser = AgeOfWushu_XMOD(data2) #parser.parse_file() #material = NoeMaterial("g_face", "E:\\My Documents\\Workspace\\sample\\Age of Wushu\\g_face_1.dds") #matList.append(material) #load the outfit dirPath = rapi.getDirForFilePath(rapi.getInputName()) fileList = [file for file in os.listdir(dirPath) if file.lower().endswith(".xmod")] for file in fileList: f = open(dirPath + file, 'rb') data2 = f.read() parser = AgeOfWushu_XMOD(data2) parser.parse_file() matList.extend(parser.matList) texList.extend(parser.texList) mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(texList, matList)) mdlList.append(mdl)
def parse_materials(self, filename): dirpath = rapi.getDirForFilePath(rapi.getInputName()) for i in range(self.numMat): name = self.read_name(128) matName = self.read_name(128) if not matName: matName = "material[%d]" %i self.inFile.seek(44, 1) numTex = self.inFile.readUInt() for i in range(numTex): if i == 1: self.inFile.read('2L') texName = self.read_name(256) texName = os.path.basename(texName) elif i == 2: self.inFile.read('2L') self.read_name(256) os.path.basename(texName) else: self.inFile.read('2L') self.read_name(256) self.matNames.append(matName) self.texNames.append(dirpath + "tex\\" + texName)
def parse_material(self): dirpath = rapi.getDirForFilePath(rapi.getInputName()) matName = self.read_name() self.inFile.readByte() #? self.inFile.read('17f') hasDiff = self.inFile.readUInt() if hasDiff: texPath = self.read_name() hasSpec = self.inFile.readUInt() if hasSpec: specPath = self.read_name() hasNorm = self.inFile.readUInt() if hasNorm: normPath = self.read_name() self.inFile.seek(7, 1) blend = self.read_name() texName = os.path.basename(texPath) tempPath = dirpath + "texture\\" + texName material = NoeMaterial(matName, tempPath) material.setDefaultBlend(0) self.matList.append(material) return matName
def load_all_models(mdlList): '''Load all models''' #carry over from previous models matList = [] texList = [] dirPath = rapi.getDirForFilePath(rapi.getInputName()) fileList = [ file for file in os.listdir(dirPath) if file.lower().endswith(".msh") ] for file in fileList: f = open(dirPath + file, 'rb') data2 = f.read() modelType = get_type(data2) if modelType == 0: parser = SanaeParser(data2) else: parser = RFParser(data2) parser.parse_file() matList.extend(parser.matList) texList.extend(parser.texList) mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(texList, matList)) mdlList.append(mdl)
def load_all_models(mdlList): '''Load all models in the selected model's directory''' #carry over from previous models matList = [] texList = [] boneList = [] dirPath = rapi.getDirForFilePath(rapi.getInputName()) fileList = [ file for file in os.listdir(dirPath) if file.lower().endswith(".xac") ] for filename in fileList: f = open(dirPath + filename, 'rb') data2 = f.read() parser = SanaeParser(data2) parser.parse_file(filename) matList.extend(parser.matList) texList.extend(parser.texList) boneList.extend(parser.boneList) mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(texList, matList)) mdl.setBones(boneList) mdlList.append(mdl)
def parse_file(self): idstring = self.inFile.read('5s') headerSize = self.inFile.readUInt() flags = self.inFile.read('4B') height, width, pitch, depth, mips = self.inFile.read('5L') #lazy self.inFile.seek(85) fmt = noeStrFromBytes(self.inFile.readBytes(4)) if fmt == "2z73": texFmt = noesis.NOESISTEX_DXT1 elif fmt == "7x0s": texFmt = noesis.NOESISTEX_DXT3 else: print("unknown pixel format") #lazy again self.inFile.seek(129) dataSize = self.inFile.dataSize - self.inFile.tell() pixelData = self.inFile.readBytes(dataSize) name = rapi.getLocalFileName(rapi.getInputName()).split('.')[0] tex = NoeTexture(name, width, height, pixelData, texFmt) self.texList.append(tex)
def parse_materials(self, filename): dirpath = rapi.getDirForFilePath(rapi.getInputName()) for i in range(self.numMat): name = self.read_name(128) matName = self.read_name(128) if not matName: matName = "material[%d]" % i self.inFile.seek(44, 1) numTex = self.inFile.readUInt() for i in range(numTex): if i == 1: self.inFile.read("2L") texName = self.read_name(256) texName = os.path.basename(texName) elif i == 2: self.inFile.read("2L") self.read_name(256) os.path.basename(texName) else: self.inFile.read("2L") self.read_name(256) self.matNames.append(matName) self.texNames.append(dirpath + "tex\\" + texName)
def parse_material(self): '''Assume texName is the same as the input name''' matName = rapi.getLocalFileName(rapi.getInputName()).split('.')[0] texName = matName + ".wys" material = NoeMaterial(matName, texName) material.setDefaultBlend(0) self.matList.append(material)
def LoadTexture(texName, file): if MODPATH != None: name = MODPATH +'\\'+ texName else: name = rapi.getDirForFilePath(rapi.getInputName()) + texName.split('\\')[-1] print(rapi.getDirForFilePath(rapi.getInputName())) if not rapi.checkFileExists(name): print("Texture not found: %s" %name) else: tex = open(name,'rb').read() noepyLoadRGBA(tex,file.texList) file.texList[-1].name = name return file.texList[-1]
def __init__(self, data): self.inFile = NoeBitStream(data) self.animList = [] self.texList = [] self.matList = [] self.boneList = [] self.dirpath = rapi.getDirForFilePath(rapi.getInputName()) self.texpath = self.dirpath + "texture\\"
def CreateGeo(self): print(len(self.idxs)) x = 0 y = len(self.geos) #8 n = [] #[5,6,7] GEO_C = 0 self.matList = [] self.texList = [] dirPath = rapi.getDirForFilePath(rapi.getInputName()) for mat in self.mats: self.matList.append(mat.material) mat = mat.material diffuse = mat.texName normal = mat.nrmTexName specular = mat.specTexName for t in [diffuse, normal, specular]: try: tex = open(dirPath + '/' + t, 'rb').read() tex = rapi.loadTexByHandler(tex, '.dds') tex.name = t self.texList.append(tex) except: raise for i in range(x, x + y): #for i in range(len(self.idxs)): idx = self.idxs[i] geo = self.geos[i] prop = geo.props print("%d: " % i, idx.name, " | ", geo.name) print(idx.numTri, idx.numIdx, geo.numVert) if not i in n: #material = self.matList[MaterialLink[idx.name]] rapi.rpgSetMaterial(MaterialLink[idx.name]) rapi.rpgBindPositionBufferOfs(geo.vertBuffer, noesis.RPGEODATA_FLOAT, geo.vertLength, prop['position']) rapi.rpgBindUV1BufferOfs(geo.uvBuffer, noesis.RPGEODATA_FLOAT, geo.uvLength, prop['tex0']) rapi.rpgBindNormalBufferOfs(geo.vertBuffer, noesis.RPGEODATA_FLOAT, geo.vertLength, prop['normal']) rapi.rpgBindTangentBufferOfs(geo.vertBuffer, noesis.RPGEODATA_FLOAT, geo.vertLength, prop['tangent']) rapi.rpgCommitTriangles(idx.idxBuffer, noesis.RPGEODATA_USHORT, idx.numIdx, noesis.RPGEO_TRIANGLE, 1) #rapi.rpgCommitTriangles (idx.idxBuffer, noesis.RPGEODATA_USHORT, idx.numTri, noesis.RPGEO_TRIANGLE, 1) if GEO_C == 1: bs = NoeBitStream() fileG = open("geo-%d.p3ddump" % i, 'wb') bs.writeUInt(geo.numVert) bs.writeBytes(geo.vertBuffer) bs.writeUInt(idx.numTri) bs.writeBytes(idx.idxBuffer) fileG.write(bs.getBuffer()) fileG.close()
def get_type(data): filename = rapi.getLocalFileName(rapi.getInputName()) if rapi.checkFileExt(filename, '.3DO'): return Shaiya3DO(data) elif rapi.checkFileExt(filename, '.3DC'): return Shaiya3DC(data) elif rapi.checkFileExt(filename, '.SMOD'): return ShaiyaSMOD(data)
def LoadTexture(texName): if ARTPATH == None: name = rapi.getDirForFilePath(rapi.getInputName())+texName else: name = texName.split('\\')[-1] tex = open(name,'rb').read() tex = rapi.loadTexByHandler(tex,'.dds') tex.name = texName return tex
def load_single_model(data, mdlList): '''Loads a single model. For testing purposes''' filename, ext = os.path.splitext(rapi.getLocalFileName(rapi.getInputName())) parser = SanaeParser(data) parser.parse_file(filename) mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdlList.append(mdl)
def load_single_model(data, mdlList): '''Loads a single model. For testing purposes''' filename = rapi.getExtensionlessName(rapi.getInputName()) parser = SanaeParser(data, filename) parser.parse_file() mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdlList.append(mdl)
def __init__(self, data): self.inFile = NoeBitStream(data) self.animList = [] self.texList = [] self.matList = [] self.boneList = [] self.meshes = [] self.materials = [] self.dirpath = rapi.getDirForFilePath(rapi.getInputName())
def noepyCheckType(data): '''Verify that the format is supported by this plugin. Default yes''' filename = rapi.getLocalFileName(rapi.getInputName()) if not ( rapi.checkFileExt(filename, '.3DO') or \ rapi.checkFileExt(filename, '.3DC') or \ rapi.checkFileExt(filename, '.SMOD')): return 0 return 1
def noepyLoadModel(data, mdlList): ctx = rapi.rpgCreateContext() filename = rapi.getLocalFileName(rapi.getInputName()) parser = SanaeParser(data, filename) parser.parse_file() mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdlList.append(mdl) return 1
def __init__(self, data): '''Initialize some data. Refer to Sanae.py to see what is already initialized''' self.inFile = NoeBitStream(data) self.animList = [] self.texList = [] self.matList = [] self.boneList = [] self.basename = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName()))
def parse_xmtl(self): dirPath = rapi.getDirForFilePath(rapi.getInputName()) xmatLib = self.filename + ".xmtl" f = open(dirPath + xmatLib, 'rb') parser = XmtlParser(f.read()) parser.parse_file(self.filename) for i in range(parser.numMat): matName, texName = parser.matNames[i], parser.texNames[i] material = NoeMaterial(matName, texName) self.matList.append(material)
def noepyCheckType(data): '''Verify that the format is supported by this plugin. Default yes''' # file ID is the numeric part of the filename filename = rapi.getLocalFileName(rapi.getInputName()) fileID = ''.join(c for c in filename if c.isdigit()) bs = NoeBitStream(data) idstring = bs.readUInt() if idstring == int(fileID) or idstring == 1213416781: #MESH return 1 return 0
def parse_xmtl(self): dirPath = rapi.getDirForFilePath(rapi.getInputName()) xmatLib = self.filename + ".xmtl" f = open(dirPath + xmatLib, "rb") parser = XmtlParser(f.read()) parser.parse_file(self.filename) for i in range(parser.numMat): matName, texName = parser.matNames[i], parser.texNames[i] material = NoeMaterial(matName, texName) self.matList.append(material)
def parseMaterials(self): dirPath = rapi.getDirForFilePath(rapi.getInputName()) self.data.seek(28) self.numMat = self.data.readUInt() matOffset = self.data.readUInt() self.data.seek(matOffset - 4, 1) materialArray = ANetModelMaterialArray(self.data) self.data.seek(materialArray.materialOffset - 4, 1) current = self.data.tell() offsetTable = self.data.read("%di" % materialArray.materialCount) diffuse = [0x67531924] normal = [2332802439, 2774157488] lightmap = [ 1745599879, ] for i in range(materialArray.materialCount): self.data.seek(current + offsetTable[i] + i * 4) matInfo = ANetModelMaterialInfo(self.data) self.data.seek(matInfo.texturepos + matInfo.textureOffset) material = NoeMaterial(str(i), '') #material.setBlendMode("GL_SRC_COLOR","GL_ONE") texInfos = [] for t in range(matInfo.textureCount): texInfos.append(ANetModelTextureReference(self.data)) for texInfo in texInfos: self.data.seek(texInfo.referencepos + texInfo.offsetToFileReference) texInDAT = self.data.read('3H') if texInfo.hash in diffuse or texInfo.hash in normal or texInfo.hash in lightmap: texture = 0xFF00 * (texInDAT[1] - 0x100) + (texInDAT[0] - 0x100) + 1 if texInfo.hash in diffuse: material.setTexture(str(texture)) elif texInfo.hash in normal: material.setNormalTexture(str(texture)) elif texInfo.hash in lightmap: self.lightMapList[i] = NoeMaterial(str(i), "") self.lightMapList[i].setTexture(str(texture)) self.lightMapList[i].setBlendMode("GL_ONE", "GL_ONE") try: path = glob.glob(dirPath + str(texture) + '*.atex')[0] tex = open(path, 'rb').read() tex = rapi.loadTexByHandler(tex, '.atex') tex.name = str(texture) + '.atex' self.texList.append(tex) except: print("Can't load", texture) else: texture = 0xFF00 * (texInDAT[1] - 0x100) + (texInDAT[0] - 0x100) + 1 #print(texture, texInfo.hash) self.matList.append(material)
def parse_materials(self): dirPath = rapi.getDirForFilePath(rapi.getInputName()) matLib = self.filename + ".mtl" f = open(dirPath + matLib, "rb") mat = MaterialParser(f.read()) mat.parse_file(self.filename) for i in range(mat.numMat): matName, texName = mat.matNames[i], mat.texNames[i] material = NoeMaterial(matName, texName) self.matList.append(material)
def __init__(self, data): '''Initialize some data. Refer to Sanae.py to see what is already initialized''' self.inFile = NoeBitStream(data, _ENDIAN) self.animList = [] self.texList = [] self.matList = [] self.boneList = [] self.meshList = [] self.filename = rapi.getExtensionlessName(rapi.getLocalFileName(rapi.getInputName()))
def parse_materials(self): dirPath = rapi.getDirForFilePath(rapi.getInputName()) matLib = self.filename + ".mtl" f = open(dirPath + matLib, 'rb') mat = MaterialParser(f.read()) mat.parse_file(self.filename) for i in range(mat.numMat): matName, texName = mat.matNames[i], mat.texNames[i] material = NoeMaterial(matName, texName) self.matList.append(material)
def open_file(self, texName): dirpath = rapi.getDirForFilePath(rapi.getInputName()) try: f = open(texName, 'rb') return f except: try: f = open(dirpath + "textures\\" + texName, 'rb') return f except: print("failed to open texture: %s" %texName)
def load_all_models(mdlList): '''Load all models''' #carry over from previous models matList = [] texList = [] filename = rapi.getLocalFileName(rapi.getInputName()) baseName = filename[:8] dirPath = rapi.getDirForFilePath(rapi.getInputName()) fileList = [file for file in os.listdir(dirPath) if file.lower().endswith(".mdl") and baseName in file] for file in fileList: f = open(dirPath + file, 'rb') data2 = f.read() parser = SanaeParser(data2) parser.parse_file() matList.extend(parser.matList) texList.extend(parser.texList) mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(texList, matList)) mdlList.append(mdl)
def CreateGeo(self): print(len(self.idxs)) x=0 y=len(self.geos)#8 n = []#[5,6,7] GEO_C = 0 self.matList = [] self.texList = [] dirPath = rapi.getDirForFilePath(rapi.getInputName()) for mat in self.mats: self.matList.append(mat.material) mat = mat.material diffuse = mat.texName normal = mat.nrmTexName specular = mat.specTexName for t in [diffuse,normal,specular]: try: tex = open(dirPath + '/' +t,'rb').read() tex = rapi.loadTexByHandler(tex,'.dds') tex.name = t self.texList.append(tex) except: raise for i in range(x,x+y): #for i in range(len(self.idxs)): idx = self.idxs[i] geo = self.geos[i] prop = geo.props print("%d: "%i,idx.name," | ",geo.name) print(idx.numTri,idx.numIdx,geo.numVert) if not i in n: #material = self.matList[MaterialLink[idx.name]] rapi.rpgSetMaterial(MaterialLink[idx.name]) rapi.rpgBindPositionBufferOfs (geo.vertBuffer, noesis.RPGEODATA_FLOAT, geo.vertLength, prop['position']) rapi.rpgBindUV1BufferOfs (geo.uvBuffer, noesis.RPGEODATA_FLOAT, geo.uvLength, prop['tex0']) rapi.rpgBindNormalBufferOfs (geo.vertBuffer, noesis.RPGEODATA_FLOAT, geo.vertLength, prop['normal']) rapi.rpgBindTangentBufferOfs (geo.vertBuffer, noesis.RPGEODATA_FLOAT, geo.vertLength, prop['tangent']) rapi.rpgCommitTriangles (idx.idxBuffer, noesis.RPGEODATA_USHORT, idx.numIdx, noesis.RPGEO_TRIANGLE, 1) #rapi.rpgCommitTriangles (idx.idxBuffer, noesis.RPGEODATA_USHORT, idx.numTri, noesis.RPGEO_TRIANGLE, 1) if GEO_C == 1: bs = NoeBitStream() fileG = open("geo-%d.p3ddump"%i,'wb') bs.writeUInt(geo.numVert) bs.writeBytes(geo.vertBuffer) bs.writeUInt(idx.numTri) bs.writeBytes(idx.idxBuffer) fileG.write(bs.getBuffer()) fileG.close()
def noepyLoadModel(data, mdlList): '''Build the model, set materials, bones, and animations. You do not need all of them as long as they are empty lists (they are by default)''' inputName = rapi.getLocalFileName(rapi.getInputName()) filename, ext = os.path.splitext(inputName) ctx = rapi.rpgCreateContext() parser = SanaeParser(data, filename) parser.parse_file() mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdl.setBones(parser.boneList) mdl.setAnims(parser.animList) mdlList.append(mdl) return 1
def parse_material(self, matLib): dirpath = rapi.getDirForFilePath(rapi.getInputName()) matLib = os.path.basename(matLib) matPath = dirpath + matLib try: f = open(matPath, 'rb') data = f.read() matLib = MatLibrary(data) material = matLib.parse_file() self.matList.append(material) return material.name except: print("Couldn't find file: ", matLib) return ""