3D Kuh in Python von obj Datei

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 3D Kuh in Python von obj Datei

    //Hierbei handelt es sich um eine Fortsetzung zur Aufgabe: http://www.easy-coding.de/loesung-3d-objektdatei-zu-einem-2d-bild-t2545.html

    Das obj-Format kann zusätzlich noch Zeilen der Form

    Quellcode

    1. f <p1> <p2> <p3>
    haben, wobei <p1>, <p2>, <p2> Integerzahlen sind und Dreiecke repräsentieren.

    Jede Zeile mit einem f repräsentiert ein Dreieck mit den Eckpunkten punkte[p1-1], punkte[p2-1] und punkte[p3-1].

    Bei den Dreiecks-P's handelt es sich um die Indizes der Liste Punkte beginnend mit 1.

    Um ein Dreieck in ein Bild zu zeichnen verwenden Sie das Modul ImageDraw.
    Das folgende Beispiel zeichnet ein rechtwinkliges Dreieck vom Ursprung.

    Quellcode

    1. draw = ImageDraw.Draw(im)
    2. draw.polygon([(0,0), (0,10), (10,0)], outline=128)


    Meine Lösung:

    Quellcode

    1. import Image, ImageDraw, sys
    2. def objread(filename, literal):
    3. "liest eine objekt datei ein"
    4. f=map(lambda x:x.split(), file(filename))
    5. f=map(lambda x:x[1:], filter(lambda x:len(x)>0 and x[0]==literal, f))
    6. return map(lambda x:tuple(map(float, x)), f)
    7. def direction(x, mode):
    8. "reduziert drei punkte zu zweien"
    9. case = {"xz":(x[0],x[1]),"xy":(x[0],x[2]), "yz":(x[1],x[2])}
    10. return map(int, case[mode])
    11. def idx2pos(tupel, punkte):
    12. "ersetzt das tupel mit indizes durch ein tupel mit den koordinaten"
    13. return map(lambda x:tuple(punkte[int(x)-1]), tupel)
    14. def machebild(punkte, dreiecke, name = "bild", mode="xy"):
    15. "erstellt aus einer objekt datei ein Bild"
    16. im = Image.new('1',(400,270))
    17. punkte = map(lambda x:direction(x,mode), punkte)
    18. dreiecke = map(lambda x:idx2pos(x,punkte),dreiecke)
    19. draw = ImageDraw.Draw(im)
    20. for t in dreiecke:
    21. draw.polygon(t,1)
    22. im.save(name)
    23. if len(sys.argv) > 4:
    24. punkte = objread(sys.argv[1], 'v')
    25. dreiecke = objread(sys.argv[1], 'f')
    26. mode = ["xy","xz","yz"]
    27. x=0
    28. for filename in sys.argv[2:]:
    29. machebild(punkte, dreiecke, filename, mode[x])
    30. x+=1
    31. print "Bild(er) erstellt"
    32. else:
    33. print "Zu wenige Parameter\n"
    34. print "Beispiel zur richtigen Nutzung: a3.py aufg3.obj xy.png xz.png yz.png"
    Alles anzeigen
    Bilder
    • programmieren-kuh-3d.png

      6,35 kB, 440×108, 943 mal angesehen
    Dateien
    • aufg3.txt

      (189,1 kB, 360 mal heruntergeladen, zuletzt: )