diff --git a/parseObj.py b/parseObj.py old mode 100644 new mode 100755 index 4a5472f..f106f00 --- a/parseObj.py +++ b/parseObj.py @@ -1,72 +1,95 @@ -# Open the file in read mode -file = open("plane.obj", "r") +#!/usr/bin/env python3 -# Read the entire content of the file -content = file.read().split("\n") +import os -file.close() - -startVerts = 0 -verts = [] -for index, line in enumerate(content): - if line[0] == "o": - startVerts = index + 1 - content = content[startVerts:] - break - -for index, line in enumerate(content): - if "vn" in line: - endVerts = index - verts = content[:endVerts] - content = content[endVerts:] - break +dir_name = "3dModels/" -normals = [] -for index, line in enumerate(content): - if "vt" in line: - normals = content[:index] - content = content[index:] - break +def source_model(file_name: str): + # Open the file in read mode + file = open(dir_name + file_name + ".obj", "r") -startFaces = 0 -faces = [] -for index, line in enumerate(content): - if line[0] == "f": - startFaces = index - faces = content[startFaces:-1] - break + # Read the entire content of the file + content = file.read().split("\n") -colors = ["{" + ",".join(vert.split(" ")[4:7]) + "}" for vert in verts] -verts = ["{" + ",".join(vert.split(" ")[1:4]) + "}" for vert in verts] -faces = [ - ",".join( - [ - str(int((d.split("/")[0])) - 1) + "," + str(int((d.split("/")[2])) - 1) - for d in face.split(" ")[1:4] - ] + file.close() + + startVerts = 0 + verts = [] + for index, line in enumerate(content): + if line[0] == "o": + startVerts = index + 1 + content = content[startVerts:] + break + + for index, line in enumerate(content): + if "vn" in line: + endVerts = index + verts = content[:endVerts] + content = content[endVerts:] + break + + normals = [] + for index, line in enumerate(content): + if "vt" in line: + normals = content[:index] + content = content[index:] + break + + startFaces = 0 + faces = [] + for index, line in enumerate(content): + if line[0] == "f": + startFaces = index + faces = content[startFaces:-1] + break + + colors = ["{" + ",".join(vert.split(" ")[4:7]) + "}" for vert in verts] + verts = ["{" + ",".join(vert.split(" ")[1:4]) + "}" for vert in verts] + faces = [ + ",".join( + [ + str(int((d.split("/")[0])) - 1) + "," + str(int((d.split("/")[2])) - 1) + for d in face.split(" ")[1:4] + ] + ) + for face in faces + ] + normals = ["{" + ",".join(normal.split(" ")[1:4]) + "}" for normal in normals] + + mtl_file = open(dir_name + file_name + ".mtl", "r") + shiny = mtl_file.read().split("\n")[4].split(" ")[1] + mtl_file.close() + print(shiny) + out = ( + '#include "../renderer.h" \n const model ' + + file_name + + "_model = {(vec3[]){" + + ",".join(verts) + + "},(int[]){" + + ",".join(faces) + + "},(vec3[]){" + + ",".join(normals) + + "},(vec3[]){" + + ",".join(colors) + + "}," + + str(len(verts)) + + "," + + str(len(faces) * 6) + + "," + + str(float(shiny) / 20) + + "};" ) - for face in faces -] -normals = ["{" + ",".join(normal.split(" ")[1:4]) + "}" for normal in normals] -out = ( - '#include "../renderer.h" \n const model testModel = {(vec3[]){' - + ",".join(verts) - + "},(int[]){" - + ",".join(faces) - + "},(vec3[]){" - + ",".join(normals) - + "},(vec3[]){" - + ",".join(colors) - + "}," - + str(len(verts)) - + "," - + str(len(faces) * 6) - + "};" -) + with open("src/models/" + file_name + ".h", "w") as f: + f.write(out) + # Close the file + f.close() -with open("src/models/plane.h", "w") as f: - f.write(out) -print(faces) -# Close the file + +model_files = os.listdir("3dModels") +li = range(0, 10) + +for file in model_files: + if file.endswith(".obj"): + source_model(file[:-4])