mirror of
https://github.com/Faraphel/Atlas-Install.git
synced 2025-07-03 03:08:29 +02:00
reworked the file to be more readable and be usable as a module
This commit is contained in:
parent
cdbb2f6493
commit
0d5e94e925
1 changed files with 40 additions and 35 deletions
|
@ -5,23 +5,49 @@ from OpenGL.GLU import *
|
|||
import pywavefront
|
||||
from PIL import Image
|
||||
|
||||
scene = pywavefront.Wavefront(r"D:\Users\RC606\Desktop\Programme\MKWF-Install\test\Track-WU8\map_model.obj",
|
||||
collect_faces=True)
|
||||
|
||||
scene_box = (scene.vertices[0], scene.vertices[0])
|
||||
for vertex in scene.vertices:
|
||||
min_v = [min(scene_box[0][i], vertex[i]) for i in range(3)]
|
||||
max_v = [max(scene_box[1][i], vertex[i]) for i in range(3)]
|
||||
scene_box = (min_v, max_v)
|
||||
|
||||
scene_size = [scene_box[1][i] - scene_box[0][i] for i in range(3)]
|
||||
max_scene_size = max(scene_size)
|
||||
scaled_size = 5
|
||||
scene_scale = [scaled_size / max_scene_size for i in range(3)]
|
||||
scene_trans = [-(scene_box[1][i] + scene_box[0][i]) / 2 for i in range(3)]
|
||||
def render_top_view(obj_file: str):
|
||||
scene_data = load_scene(obj_file)
|
||||
return get_display(scene_data)
|
||||
|
||||
|
||||
def model():
|
||||
def load_scene(obj_file: str) -> tuple:
|
||||
scene = pywavefront.Wavefront(obj_file, collect_faces=True)
|
||||
|
||||
scene_box = (scene.vertices[0], scene.vertices[0])
|
||||
for vertex in scene.vertices:
|
||||
min_v = [min(scene_box[0][i], vertex[i]) for i in range(3)]
|
||||
max_v = [max(scene_box[1][i], vertex[i]) for i in range(3)]
|
||||
scene_box = (min_v, max_v)
|
||||
|
||||
scene_size = [scene_box[1][i] - scene_box[0][i] for i in range(3)]
|
||||
max_scene_size = max(scene_size)
|
||||
scaled_size = 5
|
||||
scene_scale = [scaled_size / max_scene_size for i in range(3)]
|
||||
scene_trans = [-(scene_box[1][i] + scene_box[0][i]) / 2 for i in range(3)]
|
||||
|
||||
return scene_scale, scene_trans, scene
|
||||
|
||||
|
||||
def get_display(scene_data: tuple) -> Image:
|
||||
display = (600, 600)
|
||||
pygame.display.set_mode(display, DOUBLEBUF | OPENGL)
|
||||
gluPerspective(45, (display[0] / display[1]), 1, 500.0)
|
||||
glTranslatef(0.0, 0.0, -6.5)
|
||||
glRotatef(90, 1, 0, 0)
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
||||
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
|
||||
draw_model(*scene_data)
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
|
||||
|
||||
pix = glReadPixels(0, 0, *display, GL_RGB, GL_UNSIGNED_BYTE)
|
||||
image = Image.frombytes(mode="RGB", size=display, data=pix)
|
||||
return image
|
||||
|
||||
|
||||
def draw_model(scene_scale, scene_trans, scene):
|
||||
glPushMatrix()
|
||||
glScalef(*scene_scale)
|
||||
glTranslatef(*scene_trans)
|
||||
|
@ -53,24 +79,3 @@ def model():
|
|||
|
||||
glPopMatrix()
|
||||
|
||||
|
||||
def main():
|
||||
display = (600, 600)
|
||||
window = pygame.display.set_mode(display, DOUBLEBUF | OPENGL)
|
||||
gluPerspective(45, (display[0] / display[1]), 1, 500.0)
|
||||
glTranslatef(0.0, 0.0, -6.5)
|
||||
glRotatef(90, 1, 0, 0)
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
|
||||
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE)
|
||||
model()
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL)
|
||||
|
||||
pix = glReadPixels(0, 0, *display, GL_RGB, GL_UNSIGNED_BYTE)
|
||||
image = Image.frombytes(mode="RGB", size=display, data=pix)
|
||||
image.save("test.png")
|
||||
exit()
|
||||
|
||||
|
||||
main()
|
Loading…
Reference in a new issue