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 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 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 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 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 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 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): '''Main parser method''' idstring = self.inFile.readBytes(6) self.inFile.readShort() self.inFile.readShort() self.read_name() meshName = self.read_name() self.inFile.readByte() # delim? bbox = self.inFile.read('6f') self.inFile.readUInt() self.inFile.readUInt() numVerts, numIdx = self.inFile.read('2H') vertBuff = self.parse_vertices(numVerts) idxBuff = self.parse_faces(numIdx) self.parse_materials() rapi.rpgSetName(meshName) 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.rpgCommitTriangles(idxBuff, noesis.RPGEODATA_SHORT, 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_vertices(self, numVerts, mb, vb): print(mb) if mb[0] == 0x05 and mb[1] == 0x04: #print("vertSize: 24") vertBuff = self.inFile.readBytes(numVerts*24) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 24, 0) elif mb[0] == 0x15 and vb[1] == 0x15: #print("vertSize: 56") vertBuff = self.inFile.readBytes(numVerts*56) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 48) elif mb[0] in [0x05, 0x0A, 0x15]: #print("vertSize: 32") vertBuff = self.inFile.readBytes(numVerts * 32) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) elif mb[0] == 0: #print("vertSize: 36") vertBuff = self.inFile.readBytes(numVerts*36) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 36, 0) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 36, 2) elif mb[0] == 1: #print("vertSize: 40") vertBuff = self.inFile.readBytes(numVerts * 40) elif mb[0] == 0x55: vertBuff = self.inFile.readBytes(numVerts*64) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 64, 0) else: print("Unknown")
def SubObj(self, count): for i in range(count): self.data.seek(4, 1) numVert = self.data.readUInt() #print("numVert",numVert) offset = self.Serialise() #self.vertList.append([]) vertList = b'' for t in range(numVert): vertList += self.data.readBytes(12) self.data.seek(32, 1) self.data.seek(offset) self.data.seek(4 + 8 + 4, 1) numIdx = self.data.readUInt() #print("numIdx",numIdx,self.data.tell()) offset = self.Serialise() idxList = b'' for t in range(numIdx): idxList += self.data.readBytes(2) self.data.seek(offset) self.data.seek(4 + 8 + 4 + 4 + 4 + 4 + 128 + 128 + 24 + 4 + 8 + 8, 1) rapi.rpgBindPositionBufferOfs(vertList, noesis.RPGEODATA_FLOAT, 12, 0) rapi.rpgCommitTriangles(idxList, noesis.RPGEODATA_USHORT, numIdx, noesis.RPGEO_TRIANGLE, 1)
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 Vertex(self): self.data.seek(4,1) numOrder = self.data.readUInt() self.vertLength = vertLength = self.data.readUInt() self.numVert = numVert = self.data.readUInt() Order = self.data.read('%sI'%numOrder) self.vertBuff = vertBuff = self.data.readBytes(vertLength * numVert) offset = 0 for o in Order: if o == 0: vertOffset = offset offset += self.vertOrder[o] elif o == 4: uvOffset = offset offset += self.vertOrder[o] elif o == 1: normalOffset = offset offset += self.vertOrder[o] elif o == 5: self.boneWeightOffset = offset offset += self.vertOrder[o] elif o == 6: self.boneIndexOffset = offset offset += self.vertOrder[o] else: offset += self.vertOrder[o] rapi.rpgBindPositionBufferOfs (vertBuff, noesis.RPGEODATA_FLOAT, vertLength, vertOffset) rapi.rpgBindUV1BufferOfs (vertBuff, noesis.RPGEODATA_FLOAT, vertLength, uvOffset) rapi.rpgBindNormalBufferOfs (vertBuff, noesis.RPGEODATA_FLOAT, vertLength, normalOffset) return
def parse_vertices(self, numVerts): vertBuff = self.inFile.readBytes(numVerts * 40) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 32) self.invert_faces()
def parse_vertices(self, numVerts): vertBuff = self.inFile.readBytes(numVerts*40) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 32) self.invert_faces()
def build_meshes(self): for mesh in self.meshList: rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 44, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 44, 12) rapi.rpgBindUV1BufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 44, 28) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_USHORT, mesh.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 parse_vertices(self, numVerts): self.vertList = self.inFile.readBytes(numVerts * 48) rapi.rpgBindPositionBufferOfs(self.vertList, noesis.RPGEODATA_FLOAT, 48, 0) rapi.rpgBindNormalBufferOfs(self.vertList, noesis.RPGEODATA_FLOAT, 48, 28) rapi.rpgBindUV1BufferOfs(self.vertList, noesis.RPGEODATA_FLOAT, 48, 40) trans = NoeMat43((NoeVec3((-1.0, 0.0, 0.0)), NoeVec3((0.0, 1.0, 0.0)), NoeVec3((0.0, 0.0, 1.0)), NoeVec3((0.0, 0.0, 0.0)))) rapi.rpgSetTransform(trans)
def parse_vertices(self, numVerts): vertBuff = self.inFile.readBytes(numVerts*26) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 26, 6) #rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) #rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) #show the vertices self.plot_points(numVerts)
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) rapi.rpgCommitTriangles(mesh.idxBuff, noesis.RPGEODATA_UINT, mesh.numIdx, noesis.RPGEO_TRIANGLE, 1)
def build_mesh(self, mesh): rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 24, 0) rapi.rpgBindNormalBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 24, 12) #rapi.rpgSetName(mesh.name) #self.plot_points(mesh.numVerts) if mesh.triCount: rapi.rpgCommitTriangles(mesh.triBuff, noesis.RPGEODATA_USHORT, mesh.triCount, noesis.RPGEO_TRIANGLE, 1) if mesh.quadCount: rapi.rpgCommitTriangles(mesh.quadBuff, noesis.RPGEODATA_USHORT, mesh.quadCount, noesis.RPGEO_QUAD_ABC_ACD, 1)
def parse_vertices(self, numVerts, vertSize): if vertSize == 24: vertBuff = self.inFile.readBytes(numVerts * 24) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 24, 0) elif vertSize == 32: vertBuff = self.inFile.readBytes(numVerts * 32) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) else: print("Unknown Vert size: %d" %vertSize)
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_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 parse_vertices(self, numVerts): vertBuff = self.inFile.readBytes(numVerts * 32 * 3) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) idxBuff = bytes() for i in range(numVerts * 3): idxBuff += struct.pack('L', i) return idxBuff
def parse_vertices(self, numVerts, vertType): if vertType == 0: vertBuff = self.inFile.readBytes(44*numVerts) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 24) elif vertType == 1024: vertBuff = self.inFile.readBytes(52*numVerts) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 24)
def parse_vertices(self, numVerts, meshType): if meshType == 0: vertBuff = self.inFile.readBytes(numVerts*32) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) elif meshType == 1: vertBuff = self.inFile.readBytes(numVerts*40) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 24)
def parse_vertices(self, numVerts): vertBuff = self.inFile.readBytes(numVerts*32*3) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) idxBuff = bytes() for i in range(numVerts * 3): idxBuff += struct.pack('L', i) return idxBuff
def parse_vertex_groups(self, numGroups): for i in range(numGroups): mesh = Mesh() self.inFile.read('3L') mesh.numVerts = self.inFile.readShort() self.inFile.readShort() mesh.vertBuff = self.parse_vertices(mesh.numVerts) #self.write_mesh(mesh) rapi.rpgBindPositionBufferOfs(mesh.vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgCommitTriangles(None, noesis.RPGEODATA_USHORT, mesh.numVerts, noesis.RPGEO_POINTS, 1)
def parse_vertices(self, numVerts, vertType): if vertType == 0: vertBuff = self.inFile.readBytes(48*numVerts) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 48, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 48, 28) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 48, 40) elif vertType == 1: vertBuff = self.inFile.readBytes(32*numVerts) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24)
def parse_vertices(self, numVerts, vertType): if vertType == 0x01: vertBuff = self.inFile.readBytes(numVerts*32) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) elif vertType == 0x17: vertBuff = self.inFile.readBytes(numVerts*44) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 36)
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 parse_vertices(self, numVerts, vertSize): if vertSize == 24: vertBuff = self.inFile.readBytes(numVerts * 24) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 24, 0) elif vertSize == 32: vertBuff = self.inFile.readBytes(numVerts * 32) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) else: print("Unknown Vert size: %d" % vertSize)
def build_meshes(self): for i in range(len(self.vertBuffs)): print(len(self.idxBuffs), len(self.vertBuffs)) vertBuff, numVerts, vertSize = self.vertBuffs[i] idxBuff, numIdx = self.idxBuffs[i] if vertSize == 24: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 24, 0) elif vertSize == 32: rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) self.plot_points(numVerts)
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 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 parse_vertices(self, numVerts, vertSize): if vertSize == 52: vertBuff = self.inFile.readBytes(numVerts*52) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 28) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 52, 44) elif vertSize == 56: vertBuff = self.inFile.readBytes(numVerts*56) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 28) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 56, 48) rapi.rpgCommitTriangles(None, noesis.RPGEODATA_USHORT, numVerts, noesis.RPGEO_POINTS, 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 parse_vertices(self, numVerts, meshType): print (self.inFile.tell()) if meshType == 1: vertBuff = self.inFile.readBytes(numVerts * 32) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) elif meshType == 2: vertBuff = self.inFile.readBytes(numVerts * 36) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 36, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 36, 16) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 36, 28) elif meshType == 3: vertBuff = self.inFile.readBytes(numVerts * 40) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 20) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 32) elif meshType == 4: vertBuff = self.inFile.readBytes(numVerts * 44) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 24) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 44, 36) else: print("unknown meshType: %d" %meshType)
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)
def parse_vertices(self, numVerts, vertType): if vertType == 0: vertBuff = self.inFile.readBytes(48 * numVerts) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 48, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 48, 28) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 48, 40) elif vertType == 1: vertBuff = self.inFile.readBytes(32 * numVerts) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24)
def parse_vertices(self, numVerts, meshType): if meshType == 0: vertBuff = self.inFile.readBytes(numVerts * 32) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 32, 24) elif meshType == 1: vertBuff = self.inFile.readBytes(numVerts * 40) rapi.rpgBindPositionBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 0) rapi.rpgBindNormalBufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 12) rapi.rpgBindUV1BufferOfs(vertBuff, noesis.RPGEODATA_FLOAT, 40, 24)