30
PythonCamp 2015 Köln © 2015 M. Christen, IVGI/FHNW 1 3D Computergrafik mit Python Martin Christen, [email protected] Fachhochschule Nordwestschweiz Hochschule für Architektur, Bau und Geomatik Institut Vermessung und Geoinformation

3d mit Python (PythonCamp)

Embed Size (px)

Citation preview

Page 1: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 1

3D Computergrafik mit Python

Martin Christen, [email protected]

Fachhochschule Nordwestschweiz

Hochschule für Architektur, Bau und Geomatik

Institut Vermessung und Geoinformation

Page 2: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 2

3D Computergrafik mit Python

Ich zeige 3 Fallbeispiele wie Python für die 3D Computerfgrafik verwendet werden kann:

1. Teil: Python als Scriptsprache

2. Teil: Python für die Echtzeit-Darstellung von 3D

3. Teil: Python für die Prozessierung von Daten

Page 3: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 3

1. TeilPython als Scriptsprache

Page 4: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 4

Blender

Blender ist eine freie 3D-Grafiksoftware. Hauptanwendung ist die 3D-Modellierung, d.h. modellieren, texturieren, animieren, rendern.

Blender verwendet Python als Skriptsprache.

Download-Link:https://www.blender.org/download/

Page 5: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 5

Blender

Die aktuelle Version von Blender ist 2.73 (20. Januar 2015).

Page 6: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 6

Duch alle Objekte der Szene iterieren

for obj in bpy.data.objects:

print(obj)

Page 7: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 7

Objekte verändern

import bpy

scene = bpy.context.scene

for object in scene.objects:

obj.location.x += 1.0

Page 8: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 8

Weiterführende Infos

Python API-Referenz

(auch im Help-Menu zu finden)

Page 9: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 9

Blender: Python API Referenz

Page 10: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 10

2. Teil: Python für die Echtzeit-Darstellung von 3D

Page 11: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 11

Low Level 3D Programmierung mit Python

Low-level 3D-Programmierung hat den Vorteil, dass sehr hardwarenah programmiert werden kann.

Die Low-Level Programmierung sollte nur dann verwendet werden, wenn eine eigene Python-3D-Bibliothek erstellt werden soll.

Page 12: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 12

OpenGL

• OpenGL = Open Graphics Library

• Version 1.0 erschien 1992. (als Weiterentwicklung von IrisGL)

• Die aktuelle Version ist OpenGL 4.5 und erschien am 11. August 2014.

• OpenGL ist eine High-Performance Grafikprogrammierschnittstelle (Grafik-API) die

– unabhängig ist von der (Grafik-)hardware

– Unabhängig von GUI (Fenstersystem) und Input-Geräten

– einen Sprachumfang von ~200 Befehlen hat.

– prinzipiell unabhängig von der Programmiersprache, also auch Python!

Page 13: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 13

OpenGL in Python nutzen

Es gibt verschiedene Möglichkeiten

• Verwendung von OpenGL in PySide und PyOpenGL

• Verwendung von OpenGL mit pyglet

• Verwendung von OpenGL mit pygame

Pyglethttp://www.pyglet.org/

Windows: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pygle

PyOpenGL:

http://pyopengl.sourceforge.net/

Windows: http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyopengl

PyGame:

http://pygame.org/tags/opengl

Page 14: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 14

High Level 3D

Es gibt zahlreiche 3D-Bibliothken für Python, unter anderem:

Pygame: http://pygame.org/news.html

Cgkit: http://cgkit.sourceforge.net/

Vispy: http://vispy.org/

VPython: http://vpython.org/

VTK: http://www.vtk.org/

3D Game Engines für Python:

Blender: http://www.blender.org

Panda3D: http://www.panda3d.org/

CrystalSpace: http://www.crystalspace3d.org/main/PyCrystal

Page 15: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 15

3.TeilPython für die Prozessierung von Daten

• Python kann auch für die (Vor-)Prozessierung von Daten verwendet werden. Die effektive 3D-Darstellung erfolgt in einer anderen Sprache.

• Zum Beispiel mit JavaScript/WebGL im Webbrowser.

Page 16: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 16

Anwendung 1: OpenWebGlobe

MapData © OpenStreetMap contributors

Page 17: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 17

Funktionsweise eines 3D-Globus (und 2D-Karten)Tile System (global)Kombination: Pyramide + Mosaik

Räumliche Aufteilung mittels Quadtree

Page 18: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 18

Prozessierung von Tiles?

2D Image TileRGB(A)256x256 Pixels (meistens...)LOD Beschränkung: Anzahl Pixel

2D Vector TileEnthält 2D Geometrie, aufgrund Performance wird es aber oft auch als Bild gerastert (oder Kombination)LOD Beschränkung: Anzahl Vektoren (oder Pixel)

2D Elevation Tile (-> für 2.5D Tiles)Höhenwerte z.B. 17x17 Werte im RasterLOD Beschränkung: Anzahl Höhenwerte

Page 19: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 19

– Transformation der (lokalen) Daten in die Mercator-

Projektion (WGS-84)

– Kachelung der Original-Bilddaten für einen schnellen

Zugriff (räumliche Unterteilung in Quadtree)

– Kachelgrösse z.B. 256x256 Pixel

– Berechnung der Auflösungsstufen (Bildpyramide)

1 2

Bilddatenaufbereitung

Page 20: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 20

Daten-Prozessierung mit Cloud

Download der sichtbaren

Datenfragmente

Bilddaten, Höhendaten, 3D-Modelle, Punktwolken, POI

Web Viewer

• HTML5• WebGL• JavaScript

Prozessierung und

Caching von Tiles

(u.a. Python)

256

256

256Upload Rohdaten

in Cloud

Page 21: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 21

Proj.4 Bibliothek

• https://trac.osgeo.org/proj/

• Umgang / Konversion von geographischen Projektionen

• Python Version: pyproj

Page 22: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 22

Rasterbilder mit gdal (http://www.gdal.org)

Page 23: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 23

Anwendung 2: 3dmaps.ch (Release geplant im April 2015)

Webanwendung mit Flask (http://flask.pocoo.org/ )

Page 24: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 24

Client: Scenes overview

Page 25: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 25

Beispiel 1:

Page 26: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 26

Beispiel 2:

Page 27: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 27

Beispiel 3:

Page 28: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 28

Funktionsweise

Page 29: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 29

Fazit

Es gibt verschiedene Möglichkeiten Python für 3D-Grafikanwendungen zu nutzen

Besondes gut eignet sich Python als Skriptsprache und für die Datenprozessierung in der Cloud.

Für gewisse Echtzeitanwendungen, insbesondere in Kombination mit PySide kann Python durchaus auch verwendet werden.

Page 30: 3d mit Python (PythonCamp)

PythonCamp 2015 Köln© 2015 M. Christen, IVGI/FHNW 30

Fragen