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() parser = SanaeParser(data) parser.parse_file() #build meshes for pose in parser.vertGroups.keys(): print(pose, len(parser.vertGroups[pose])) vertBuffs = parser.vertGroups["walk"] for i in range(len(vertBuffs)): idxBuff, numIdx, matNum = parser.idxBuffs[i % len(parser.idxBuffs)] vertBuff = vertBuffs[i] rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) matName = parser.matList[matNum].name rapi.rpgSetMaterial(matName) rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(parser.texList, parser.matList)) mdl.setBones(parser.boneList) mdl.setAnims(parser.animList) mdlList.append(mdl) return 1
def build_meshes(self): rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) for mesh in self.meshList: print(mesh.vertSize) if mesh.vertSize == 28: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 28, 0) elif mesh.vertSize == 32: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) #rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 20) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_HALFFLOAT, 32, 16) elif mesh.vertSize == 36: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 36, 0) elif mesh.vertSize == 40: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 40, 0) elif mesh.vertSize == 44: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 44, 0) #for j in range(mesh.numFaceGroups): # Not sure for j in range(1): numIdx = mesh.numIndices[j] idxBuff = mesh.idxBuffs[j] rapi.rpgSetMaterial("WP_A_1550small.tga") rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE_STRIP, 1)
def build_meshes(self): for i in range(len(self.idxBuffs)): idxBuff, numIdx, matNum = self.idxBuffs[i] vertBuff, vertType = self.vertBuffs[i] if matNum != -1: matName = self.matList[matNum].name rapi.rpgSetMaterial(matName) if vertType == 0.125: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, 16, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, 16, 6) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, 16, 12) elif vertType in [0.0333, 0.0335]: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, 22, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, 22, 6) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_HALFFLOAT, 22, 18) rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_vertices(self, mesh, meshName): vertBuff = bytes() normBuff = bytes() uvBuff = bytes() idxBuff = bytes() rapi.rpgSetName(meshName) for i in range(mesh.numIdx): index = mesh.idxList[i] vertBuff += struct.pack('3f', *mesh.vertList[index]) normBuff += struct.pack('3f', *mesh.normList[index]) uvBuff += struct.pack('2f', *mesh.uvList[i]) idxBuff += struct.pack('H', i) rapi.rpgBindPositionBuffer(vertBuff, noesis.RPGEODATA_FLOAT, 12) rapi.rpgBindNormalBuffer(normBuff, noesis.RPGEODATA_FLOAT, 12) rapi.rpgBindUV1Buffer(uvBuff, noesis.RPGEODATA_FLOAT, 8) matName = meshName material = NoeMaterial(matName, self.basename) material.setDefaultBlend(0) self.matList.append(material) rapi.rpgSetMaterial(meshName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_meshes(self): matCount = 0 for i in range(len(self.meshList)): mesh = self.meshList[i] if mesh.matNum != -1: mat = self.tempMats[mesh.matNum] rapi.rpgSetName(mesh.meshName) rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 56, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 56, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 56, 24) for j in range(len(mesh.faceGroups)): numIdx, idxBuff = mesh.faceGroups[j] if numIdx == 0: continue matName = "Material[%d]" % matCount texName = mat.texNames[i] material = NoeMaterial(matName, texName) self.matList.append(material) rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def parse_file(self): idstring = self.inFile.readBytes(12) offVerts, offBones, offFaces, unkOff1, unkOff2, ofsbbox, unkOff4, \ unk1, unk2, unkOff5, unk3, unk4, unk5, vertType, unk7 \ = self.inFile.read('15L') meshName = self.read_name() matName = self.read_name() self.inFile.readUInt() self.inFile.seek(offVerts) numVerts = self.inFile.readUInt() self.parse_vertices(numVerts, vertType) self.inFile.seek(offBones) numBones = self.inFile.readUInt() self.parse_bones(numBones, numVerts) self.inFile.seek(offFaces) numFaces = self.inFile.readUInt() rapi.rpgSetMaterial(matName) self.parse_faces(numFaces * 3) self.load_texture(matName)
def CreateModel(self): for n in range(self.numMesh): rapi.rpgBindPositionBufferOfs(self.vertBuff[n], noesis.RPGEODATA_HALFFLOAT, 64, 0) rapi.rpgBindUV1BufferOfs(self.vertBuff[n], noesis.RPGEODATA_SHORT, 64, 16) rapi.rpgBindUV2BufferOfs(self.vertBuff[n], noesis.RPGEODATA_SHORT, 64, 16) idxBuffer = self.idxBuff[n][:] for i in range(self.numDrawCall[n]): numDrawFace = self.drawCallFace[n][i] idxBuff = idxBuffer[:numDrawFace * 6] idxBuffer = idxBuffer[numDrawFace * 6:] rapi.rpgSetMaterial(self.matList[self.matID[n][i]].name) if self.matID[n][i] in self.matEmis: #rapi.rpgSetLightmap(self.matEmis[self.matID[n][i]].name) self.matList[self.matID[n][i]].setNextPass( self.matEmis[self.matID[n][i]]) rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) if SKIPTOID: rapi.rpgBindBoneIndexBufferOfs(self.boneBuff[n], noesis.RPGEODATA_UBYTE, 4, 0, 4) else: rapi.rpgBindBoneIndexBufferOfs(self.vertBuff[n], noesis.RPGEODATA_UBYTE, 64, 44, 4) rapi.rpgBindBoneWeightBufferOfs(self.vertBuff[n], noesis.RPGEODATA_FLOAT, 64, 28, 4) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numDrawFace * 3, noesis.RPGEO_TRIANGLE, 1)
def parse_file(self): idstring = self.inFile.readBytes(12) offVerts, offBones, offFaces, unkOff1, unkOff2, ofsbbox, unkOff4, \ unk1, unk2, unkOff5, unk3, unk4, unk5, vertType, unk7 \ = self.inFile.read('15L') meshName = self.read_name() matName = self.read_name() self.inFile.readUInt() self.inFile.seek(offVerts) numVerts = self.inFile.readUInt() self.parse_vertices(numVerts, vertType) self.inFile.seek(offBones) numBones = self.inFile.readUInt() self.parse_bones(numBones, numVerts) self.inFile.seek(offFaces) numFaces = self.inFile.readUInt() rapi.rpgSetMaterial(matName) self.parse_faces(numFaces*3) self.load_texture(matName)
def build_meshes(self): rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) for i in range(len(self.meshList)): mesh = self.meshList[i] rapi.rpgSetName(mesh.name) if mesh.vertSize == 32: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) elif mesh.vertSize == 40: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 40, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 40, 20) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 32) elif mesh.vertSize == 48: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 48, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 48, 28) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 48, 40) for sub in mesh.submeshes: idxStart = sub.idxOfs idxEnd = idxStart + sub.numIdx * 2 idxBuff = mesh.idxBuff[idxStart:idxEnd] rapi.rpgSetMaterial(self.tex) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, sub.numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_mesh_quads(self, vertList, quadBuffs): for matNum in quadBuffs: numIdx = 0 idxBuff = bytes() vertBuff = bytes() idxList = quadBuffs[matNum]["idxList"] uvBuff = quadBuffs[matNum]["uvBuff"] for index in idxList: coords = vertList[index] vertBuff += struct.pack("3f", *(map(float, coords))) idxBuff += struct.pack("L", numIdx) numIdx += 1 matName = self.matList[matNum].name rapi.rpgSetMaterial(matName) rapi.rpgBindPositionBuffer(vertBuff, noesis.RPGEODATA_FLOAT, 12) if uvBuff: rapi.rpgBindUV1Buffer(uvBuff, noesis.RPGEODATA_FLOAT, 8) # RPGEO_QUAD, //ABC_DCB # RPGEO_QUAD_ABC_BCD, # RPGEO_QUAD_ABC_ACD, # RPGEO_QUAD_ABC_DCA rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_UINT, numIdx, noesis.RPGEO_QUAD_ABC_ACD, 1)
def __init__(self, data, i): data.seek(2, 1) self.numVert = data.readUShort() self.ptr = data.readUInt() data.seek(28, 1) self.xyz = data.read('3f') current = data.tell() data.seek(self.ptr + 2) self.headers = data.readUShort() pLine = 'SubMesh: \n numVert: %d\n Headers: %d' % (self.numVert, self.headers) print(pLine) #if self.headers != 1: print('Not Header 1',data.tell());data.seek(current);return data.seek(4, 1) ptrs = data.read('5I') data.seek(ptrs[0]) rapi.rpgBindPositionBuffer(data.readBytes(self.numVert * 12), noesis.RPGEODATA_FLOAT, 12) data.seek(ptrs[1]) rapi.rpgBindUV1Buffer(data.readBytes(self.numVert * 12), noesis.RPGEODATA_FLOAT, 12) data.seek(ptrs[2]) data.seek(current) mat = NoeMaterial(str(i), str(i)) rapi.rpgSetMaterial(str(i)) rapi.rpgCommitTriangles(None, noesis.RPGEODATA_UINT, self.numVert, noesis.RPGEO_TRIANGLE_STRIP_FLIPPED, 1)
def build_mesh(self): print(len(self.idxBuffs), len(self.matList)) for i in range(len(self.idxBuffs)): vertBuff, vertSize = self.vertBuffs[i] idxBuff, numIdx = self.idxBuffs[i] if i < len(self.matList): matName = self.matList[i].name else: matName = self.matList[-1].name if vertSize == 56: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 0) rapi.rpgBindPositionUV1Ofs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 28) elif vertSize == 72: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 72, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 72, 28) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 72, 44) rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def parse_file(self): '''Main parser method''' rapi.rpgSetMaterial(self.basename) header, meshType = self.inFile.read('2L') if meshType == 0: self.inFile.read('9f') self.inFile.read('76B') numBones, numVerts, numUnk = self.inFile.read('3L') numIdx = self.inFile.readUInt() * 3 self.inFile.read('40B') print(numVerts, numBones, numIdx) self.parse_vertices(numVerts) self.parse_bones(numBones) idxBuff = self.parse_faces(numIdx) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) elif meshType == 1: print("mobject") self.inFile.read('9f') self.inFile.read('76B') numAnims, numVerts, numUnk = self.inFile.read('3L') numIdx = self.inFile.readUInt() * 3 print(numAnims, numVerts, numIdx) #self.parse_animations(numAnims) #print(self.inFile.tell()) self.parse_vertices(numVerts) self.plot_points(numIdx)
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)''' parser = SanaeParser(data) parser.parse_file() ctx = rapi.rpgCreateContext() for i in range(len(parser.vertBuffs)): vertBuff, numVerts = parser.vertBuffs[i] idxBuff, numIdx, matNum = parser.idxBuffs[i] matList = [parser.matList[matNum]] texList = [parser.texList[matNum]] matName = matList[0].name rapi.rpgReset() rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) mdl = rapi.rpgConstructModel() mdl.setModelMaterials(NoeModelMaterials(texList, matList)) mdl.setBones(parser.boneList) mdl.setAnims(parser.animList) mdlList.append(mdl) return 1
def parse_file(self): meshName = self.read_name() matName = self.read_name() texName = meshName numIdx = self.inFile.readUInt() * 3 numVerts, numUV = self.inFile.read('2L') vertBuff = self.parse_vertices(numVerts) idxBuff = self.parse_faces(numIdx) uvBuff = self.parse_uv(numUV) self.parse_uv_index(numIdx) #create material material = NoeMaterial(matName, texName) self.matList.append(material) #build mesh rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 24, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 24, 12) #commit triangles rapi.rpgSetMaterial(texName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) #what to do with these UV's? rapi.rpgBindUV1Buffer(uvBuff, noesis.RPGEODATA_FLOAT, 8)
def parse_unskinned_mesh(self): meshName = "mesh" matName = meshName rapi.rpgSetMaterial(matName) check = self.inFile.readInt() #important? while check != -1: print(self.read_name()) self.inFile.readUInt() self.inFile.readUInt() self.inFile.read('9f') print(self.inFile.tell()) check = self.inFile.readInt() print(self.inFile.tell()) self.inFile.read('6f') unk2 = self.inFile.readUInt() if unk2: self.read_name() self.inFile.read('2L') numVerts = self.inFile.readUInt() print("%d verts" %numVerts) self.parse_unskinned_vertices(numVerts) numIdx = self.inFile.readUInt() self.parse_faces(numIdx) #if bBones == 1: #self.parse_weights(numVerts) #sectionSize = self.inFile.readUInt() #self.parse_bones(sectionSize) print(self.inFile.tell()) self.parse_unskinned_materials(matName)
def build_meshes(self): for meshInfo in self.meshInfo: vertBuff = meshInfo[0] idxBuff = meshInfo[1] numIdx = meshInfo[2] matNum = meshInfo[3] meshName = meshInfo[4] if self.xxFormat >= 4: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 70, 2) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 70, 30) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 70, 42) else: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 4) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 32) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 44) if len(self.matList) > matNum: mat = self.matList[matNum] matName = mat.name rapi.rpgSetMaterial(matName) rapi.rpgSetName(meshName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) rapi.rpgClearBufferBinds()
def parse_mesh(self): meshName = self.read_name() null, matNum = self.inFile.read("2L") numMat = self.inFile.readUInt() if numMat: self.inFile.readUInt() if numMat > 1: self.inFile.readUInt() self.parse_materials(numMat) self.inFile.readUInt() self.inFile.read('2f') self.inFile.read('3L') flag1 = self.inFile.readUInt() numVerts = self.inFile.readUInt() numNorms = self.inFile.readUInt() numIdx = self.inFile.readUInt() * 3 numBones = self.inFile.readUInt() numWeights = self.inFile.readUInt() self.inFile.read('50f') self.parse_vertices(numVerts, numNorms, numWeights) idxBuff = self.parse_faces(numIdx) #idxBuff2 = self.parse_faces(numIdx) if numIdx: matName = self.matList[matNum].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_UINT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def parse_file(self): idstring = self.inFile.readUInt() hasMat, numMesh = self.inFile.read('2H') if hasMat: numMat = self.inFile.readUInt() for i in range(numMat): name = self.read_name(64) self.inFile.read('4L') #just hardcode matName for now matName = self.parse_material() numIdx = self.inFile.readUInt() numVerts = self.inFile.readUInt() else: matName = self.parse_material() numIdx, numVerts = self.inFile.read('2L') idxBuff = self.parse_faces(numIdx, matName) self.parse_vertices(numVerts) rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def parse_mesh(self, numMesh): for i in range(numMesh): self.read_name() # scene root meshName = self.read_name() rapi.rpgSetName(meshName) numVerts, numIdx, unk = self.inFile.read("3L") triStrip, flag1, unk, unk = self.inFile.read("4B") self.inFile.seek(496, 1) idxBuff = self.parse_faces(numIdx) self.parse_vertices(numVerts) print(self.inFile.tell()) if self.hasBones: numBones = self.inFile.readUInt() self.parse_mesh_bones(numBones) texName = meshName + ".dds" matName = "material" material = NoeMaterial(matName, texName) self.matList.append(material) print(self.inFile.tell()) rapi.rpgSetMaterial(matName) if triStrip: rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE_STRIP, 1) else: rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
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() parser = SanaeParser(data) parser.parse_file() #build meshes for pose in parser.vertGroups.keys(): print(pose, len(parser.vertGroups[pose])) vertBuffs = parser.vertGroups["walk"] for i in range(len(vertBuffs)): idxBuff, numIdx, matNum = parser.idxBuffs[i%len(parser.idxBuffs)] vertBuff = vertBuffs[i] rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) matName = parser.matList[matNum].name rapi.rpgSetMaterial(matName) rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) 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_file(self, filename): idstring = self.inFile.readBytes(6) unk, numMesh = self.inFile.read('2H') self.read_name() modelName = self.read_name() self.inFile.readByte() #? self.inFile.read('6f') self.inFile.read('2L') numVerts, numIdx = self.inFile.read('2H') self.parse_vertices(numVerts) idxBuff = self.parse_faces(numIdx) matName = self.parse_material() rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) ##unknowns #self.parse_unk() #count = self.inFile.readUInt() #self.parse_unk2(count) #count2 = self.inFile.readUInt() #self.parse_unk3(count2) #count3 = self.inFile.readUInt() #self.parse_unk4(count3)
def parse_mesh(self, numMesh): for i in range(numMesh): self.read_name() #scene root meshName = self.read_name() rapi.rpgSetName(meshName) numVerts, numIdx, unk = self.inFile.read('3L') triStrip, flag1, unk, unk = self.inFile.read('4B') self.inFile.seek(496, 1) idxBuff = self.parse_faces(numIdx) self.parse_vertices(numVerts) print(self.inFile.tell()) if self.hasBones: numBones = self.inFile.readUInt() self.parse_mesh_bones(numBones) texName = meshName + ".dds" matName = "material" material = NoeMaterial(matName, texName) self.matList.append(material) print(self.inFile.tell()) rapi.rpgSetMaterial(matName) if triStrip: rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE_STRIP, 1) else: rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_meshes(self): for i in range(len(self.idxBuffs)): idxBuff, numIdx = self.idxBuffs[i] matName = self.matList[i].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
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 build_mesh(self, idxBuff): for matInfo in self.materials: one, start, count, matNum = matInfo end = start*2 + count*2 idxList = idxBuff[start*2:end] matName = self.matList[matNum].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxList, noesis.RPGEODATA_USHORT, count, noesis.RPGEO_TRIANGLE, 1)
def parse_face_section(self, numSects): for i in range(numSects): numIdx = self.inFile.readInt() idxList = self.parse_faces(numIdx) self.inFile.readInt() matName = self.read_name() rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxList, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_mesh(self, idxBuff): for matInfo in self.materials: one, start, count, matNum = matInfo end = start * 2 + count * 2 idxList = idxBuff[start * 2:end] matName = self.matList[matNum].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxList, noesis.RPGEODATA_USHORT, count, noesis.RPGEO_TRIANGLE, 1)
def build_mesh(self): for i in range(len(self.meshList)): mesh = self.meshList[i] rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 48, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 48, 28) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 48, 40) matName = self.matList[i].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_USHORT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_mesh(self): for mesh in self.meshList: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 92, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 92, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 92, 28) rapi.rpgSetName(mesh.meshName) matName = self.matList[mesh.matNum].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_UINT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_faces(self, idxBuff, matUsed, materials): start = 0 for i in range(len(matUsed)): numIdx = matUsed[i] * 3 end = start + numIdx * 4 buff = idxBuff[start:end] rapi.rpgSetMaterial(materials[i]) rapi.rpgCommitTriangles(buff, noesis.RPGEODATA_UINT, numIdx, noesis.RPGEO_TRIANGLE, 1) start = end
def build_mesh(self): for i in range(len(self.meshList)): mesh = self.meshList[i] rapi.rpgSetName(self.filename) rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 40, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 40, 16) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 40, 32) matName = self.matList[0].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_UINT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_meshes(self): for i in range(len(self.meshList)): mesh = self.meshList[i] rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) print(mesh.matNum) matName = self.matList[mesh.matNum].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_USHORT, mesh.numIdx, noesis.RPGEO_TRIANGLE_STRIP, 1)
def build_mesh(self, numVerts): idxBuff, idxCount = self.faceInfo.pop() print(len(idxBuff), idxCount) material = self.matList[0] material.setTexture(self.texNames[0]) material.setDefaultBlend(0) rapi.rpgSetMaterial(material.name) #rapi.rpgCommitTriangles(None, noesis.RPGEODATA_USHORT, numVerts, noesis.RPGEO_POINTS, 1) #rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, idxCount, noesis.RPGEO_TRIANGLE, 1) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, idxCount, noesis.RPGEO_TRIANGLE_STRIP, 1)
def build_mesh(self): for mesh in self.meshList: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 92, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 92, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 92, 28) trans = NoeMat43((NoeVec3((-1, 0, 0)), NoeVec3((0, 1, 0)), NoeVec3((0, 0, 1)), NoeVec3((0, 0, 0)))) rapi.rpgSetTransform(trans) rapi.rpgSetName(mesh.matName) rapi.rpgSetMaterial(mesh.matName) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_UINT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def assign_face_material(self, numMat, numIdx): '''Have to split the idxList into separate parts, where each index is an integer''' for i in range(numMat): start = self.faceMats[i][0] count = self.faceMats[i][1] end = start*4 + count*4 idxList = self.idxList[start*4:end] matName = self.matList[i].name rapi.rpgSetMaterial(matName) if count: rapi.rpgCommitTriangles(idxList, noesis.RPGEODATA_UINT, count, noesis.RPGEO_TRIANGLE, 1)
def build_meshes(self): for i in range(len(self.meshList)): mesh = self.meshList[i] print(mesh.name) if "lod01" not in mesh.name: continue rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, mesh.vertSize, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_HALFFLOAT, mesh.vertSize, 6) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_HALFFLOAT, mesh.vertSize, 10) matName = self.matList[i].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_USHORT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_mesh(self): for i in range(len(self.meshList)): mesh = self.meshList[i] rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) meshName = "Mesh%d" %i rapi.rpgSetName(meshName) mat = self.matList[i] rapi.rpgSetMaterial(mat.name) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_USHORT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def assign_materials(self, idxBuff, matInfo): start = 0 for mat in matInfo: matName = mat[0] numIdx = mat[1] end = start + numIdx*2 buff = idxBuff[start:end] rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(buff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) start += numIdx*2
def build_meshes(self): for i in range(len(self.meshList)): mesh = self.meshList[i] if mesh.numVerts > 0: rapi.rpgBindPositionBuffer(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 12) self.invert_faces() if mesh.matNum != -1: matName = self.matList[mesh.matNum].name rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_UINT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def assign_materials(self, idxBuff, matInfo): start = 0 for mat in matInfo: matName = mat[0] numIdx = mat[1] end = start + numIdx * 2 buff = idxBuff[start:end] rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(buff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1) start += numIdx * 2
def build_meshes(self): for mesh in self.meshList: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_HALFFLOAT, 24, 0) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_HALFFLOAT, 24, 8) for idxStart, numIdx, matName in self.meshInfo: start = idxStart * 2 end = start + (numIdx * 2) idxBuff = mesh.idxBuff[start:end] rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
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 build_meshes(self): for mesh in self.meshList: if mesh.vertType == 3: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 48, 0) elif mesh.vertType == 9: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 72, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 72, 52) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 72, 40) for numIdx, idxBuff, matName in mesh.faceGroups: rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_mesh(meshList): for mesh in meshList: if mesh.vertSize == 32: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) elif mesh.vertSize == 36: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 36, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 36, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 36, 28) rapi.rpgSetMaterial(mesh.matName) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_USHORT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def parse_meshes(self, numMesh, vertType): for i in range(numMesh): meshName = self.read_name() texNum, matNum = self.inFile.read('2l') if vertType == 1: self.inFile.readUInt() numVerts, numIdx = self.inFile.read('2L') matName = self.create_material(matNum, texNum) self.parse_vertices(numVerts, vertType) idxBuff = self.parse_faces(numIdx) rapi.rpgSetMaterial(matName) #rapi.rpgSetOption(noesis.RPGOPT_TRIWINDBACKWARD, 1) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_mesh(self): for mesh in self.meshList: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) for matNum in mesh.idxBuffs: matName = mesh.materials[matNum].name idxBuff = mesh.idxBuffs[matNum] numIdx = len(idxBuff) // 2 rapi.rpgSetMaterial(matName) rapi.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)