SlideShare a Scribd company logo
Martin  Christen
FHNW
Hochschule   für  Architektur,  Bau  und  Geomatik
Institut  Vermessung   und  Geoinformation
martin.christen@fhnw.ch
@MartinChristen
3D  Computer  Graphics  with Python
„3D  Graphics  the Pythonic Way“
Swiss  Python  Summit
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 2
About this talk
In  this  talk  several  technologies  around  3D  graphics  for  Python  are  presented.  
• A  brief  introduction  to  scripting  Blender shows  the  possibilities  of  creating  
complex  3D  Worlds  and  games.  
• The  second  part  shows  how  to  create  low  level  3D  applications  and  how  
Python  is  used  to  create  preprocessed  3D  worlds  for  the  webbrowser.
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 3
PART  I:  Python  and  Blender
What  is  Blender  ?
• Blender  is  a  free  and  open  source  3D  creation  suite  for:
• Modelling
• Animation
• Simulation
• Rendering
• Video  Editing
• Motion  Tracking
• Game  Creation
• …and  more..  
• Runs  on  Linux,  MacOS and  Windows
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 4
Cycles  Demo  Reel  (2015)  – All  made  with  Blender
https://www.youtube.com/watch?v=wDRTjzLNK0g
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 5
Blender  Motion  Tracking
https://www.youtube.com/watch?v=2AvQiOf2IGA
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 6
Python  Scripting  in  Blender
Choose  the  Scripting  View:
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 7
Python  Scripting  in  Blender
Now  you  see  the  Python  3.x  console:
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 8
The  first  program:
Accessing  Data  is  quite  simple,  use  the  module  bpy.data:
list(bpy.data.objects)
list(bpy.data.scenes)
list(bpy.data.materials)
So  let’s  enter  the  following  in  the  Python  console:
>>> list(bpy.data.objects)
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 9
List  of  all  objects  in  the  scene:
And  that  is  pretty  much  what  you  see
in  the  scene  graph:
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 10
Python  Scripting  in  Blender
Open  the  Tab  in  the  3d  View  and  select  “Create”:
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 11
Python  Scripting  in  Blender
When  you  hold  mouse  over  “Cube”  you  will  see  the  Python  Command  how  to  
create  a  cube!  Just  note  it  and  click  on  cube.
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 12
Python  Scripting  in  Blender
When  you  create  the  cube  you  will  see  the  exact  command  that  was  called  to  
create  it.  You  see  most  actions  as  Python code  there.
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 13
Python  Scripting  in  Blender:  Adding  (predefined)  Objects
Right  click  on  the  text  (highligh)  and  copy  the  text  (ctrl-­c)
bpy.ops.mesh.primitive_cube_add(radius=1, view_align=False,
enter_editmode=False, location=(0, 0, 0), layers=(True, False, False,
False, False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False))
Hit  undo  (ctrl-­z)
And  now  we  modity the  command  using  location=(0,3,0)  and  radius=2:
bpy.ops.mesh.primitve_cube_add(radius=2, location=(0,3,0))
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 14
Python  Scripting  in  Blender:  Transform  objects
If  we  move  the  new  cube  by  pressing  and  holding  the  blue  z-­Axis  we  can  see  the  
following  command:
bpy.ops.transform.translate(value=(0, 0, 3.10625), constraint_axis=(False,
False, True), constraint_orientation='GLOBAL', mirror=False,
proportional='DISABLED', proportional_edit_falloff='SMOOTH',
proportional_size=1, release_confirm=True)
That  is  how  an  object  is  translated
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 15
Python  Scripting  in  Blender:  Operations
Apply  Operations  like  Subdivision:
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.subdivide()
bpy.ops.mesh.subdivide()
bpy.ops.mesh.subdivide()
bpy.ops.object.mode_set(mode=OBJECT')
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 16
Creating  Meshes  for  example:  Tetrahedron
import bpy
s = 0.5**0.5 # 0.5*sqrt(2)
verts = ((s,s,-1), (s,-s,-1), (-s,-s,-1), (-s,s,-1), (0,0,1))
faces = ((1,0,4), (4,2,1), (4,3,2), (4,0,3), (0,1,2,3))
mesh = bpy.data.meshes.new("TetrahedronMesh")
object = bpy.data.objects.new("TetrahedronObject", mesh)
object.location = (0,0,0) # origin
scene = bpy.context.scene
scene.objects.link(object)
scene.objects.active = object
object.select = True
mesh.from_pydata(verts, [], faces) # vertices, edges, faces
mesh.update()
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 17
Real  Life  Example
Using  Python  to  optimize  3D  objects:
bpy.ops.object.select_all(action='DESELECT')
bpy.context.scene.objects.active = bpy.data.objects[1]
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.join()
bpy.ops.object.mode_set(mode='EDIT')
bpy.ops.mesh.dissolve_limited()
bpy.ops.mesh.remove_doubles(threshold=0.01)
bpy.ops.mesh.select_all(action='DESELECT')
bpy.ops.mesh.select_interior_faces()
bpy.ops.mesh.delete(type='FACE')
bpy.ops.object.mode_set(mode='OBJECT')
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 18
Historic  Roman  City  “Augusta  Raurica”  – Generated  with  ESRI  City  Engine
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 19
Cleaned  up:  Jour,  Remove  Double  Vertices/Faces,  Interior  Faces
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 20
Final  Result  (125’929  triangles  optimized  to  56’216  triangles)
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 21
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 22
PART  II:  Low  Level  APIs
• OpenGL API  bindings
• Open  Graphics  Library -­ based on  C
• http://pyopengl.sourceforge.net/
• DirectPython 11:  Direct3D  11  (Windows  only)
• http://directpython11.sourceforge.net/
• Not  Cross  Platform
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 23
PyOpenGL
Supports  OpenGL  1.1  to 4.4
Works  with popular GUI  libraries,  for example:
• wxPython
• PyQT /  PySide
• PyGTK
• PyGame
• Tkinter (+  Togl widget)
I‘m not  going to make an  OpenGL  introduction here...
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 24
How  OpenGL  Works
Primitives   (=Points,  Linies,  Triangles)  are converted to Fragments  (Pixels).
Program Vertex-­Operations (e.g.  projection,  transformation).
Program Fragment-­Operations for shading/lighting/texturing.
Vertex/Fragment  Shaders [run on  the GPU  and]  are written in  GLSL.
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 25
Vispy:  
http://vispy.org/ (  https://github.com/vispy/vispy )
VisPy is  a  young  library  under  heavy  development  at  this  time.  It  targets  two  
categories  of  users:
• Users  knowing  OpenGL,  or  willing  to  learn  OpenGL,  who  want  to  create  
beautiful  and  fast  interactive  2D/3D  visualizations  in  Python  as  easily  as  
possible.
• Scientists  without  any  knowledge  of  OpenGL,  who  are  seeking  a  high-­level,  
high-­performance  plotting  toolkit.
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 26
Install  vispy
1) Numpy is  required
2) OpenGL  is  required
3) A  compatible  GUI  Toolkit  is  required
Then:
pip install vispy
More  info:  http://vispy.org/installation.html
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 27
Example,  lets  create  a  virtual  environment  named  “gl”
python3.5 -m venv gl
source gl/bin/activate
pip install vispy # also installs numpy
pip install pyglet
…  do  your  stuff  …
Deactivate
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 28
Development  Version  (currently  0.5.0.dev0)
git clone git://github.com/vispy/vispy.git
cd vispy
python3.5 setup.py develop
(Only  this  version  support  Jupyter Notebook!)
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 29
Windows
on  Windows,  download  modules*  from:
http://www.lfd.uci.edu/~gohlke/pythonlibs
*)  vispy,  numpy &  pyglet
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 30
Our  first  App
import sys
from vispy import app, gloo
canvas = app.Canvas(app='pyglet', keys='interactive', size=(800, 600))
@canvas.connect
def on_draw(event):
gloo.set_clear_color((1.0, 0.0, 0.0, 1.0))
gloo.clear()
canvas.show()
if __name__ == '__main__':
app.run()
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 31
Use  Shaders,  Geometry
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 32
Jupyter Notebook  (WebGL Output)
• Virtual  Globe using WebGL
• Open  Source  Project  started in  
April  2011
• JavaScript  Library  for rapid  
developmentof web-­based
geospatial 3D  applications
• Data  Processing  in  Python
332.5.2016 33
Python  for Data  Processing
Institute  of  Geomatics  Engineering
2.5.2016Institute  of  Geomatics  Engineering 34
Demo
2.5.2016Institute  of  Geomatics  Engineering
Streaming  3D-­Geometry  Tiles
MapData  ©  OpenStreetMap  contributors
35
BTh Hürbi/Daetwyler,  MTh Lucas  Oertli,  2013
2.5.2016Institute  of  Geomatics  Engineering 36
Streaming  Example:  3D  Geometry  using  OSM  and  “BOI”  (worldwide   streaming)
MTh Lucas  Oertli,  2013
2.5.2016Institute  of  Geomatics  Engineering 37
Streaming  Example:  Osnabrück (local  streaming)
Created  by  Geoplex with  Plexmap,  based  on  OpenWebGlobe
2.5.2016Institute  of  Geomatics  Engineering 38
Some  Problems  I  have  with  (Web-­Based)  Virtual  Globes
• Unfortunately,   WebGL compatibility  is  still  an  issue…  a  “fallback”  is  required
• Most  people   still  prefer  2D  Maps
• Navigation   in  3D  is  too  complicated  for  many  users…
• In  the  “Geo-­World”,   3D  Models  are  usually  not  built  by  3D  game   designers:
• Often  there   are  “too  many”  &  “too  big”  textures  per  object
• Different  details  per  3D-­object
• Remember   “Google   3D  Warehouse”
• Level  of  Detail:  Generalization   in  2D  is  accepted,    but  not  in  3D!
• Limited  number   of  people   actually  do  have  data  of  the  whole  world…
• Most  virtual  globe   based  applications  I  know  are  limited  to  a  certain  region/country/…
• Too  slow  (bandwidth/3D   rendering)   on  mobile  devices
• Too  power   consuming  on  mobile  devices
2.5.2016Institute  of  Geomatics  Engineering 39
Bringing  together  2D  Maps  and  3D  Globes
Concept:  Prerender a  3D  Scene  using  a  high  quality  offline  3D  renderer  using  an  
orthographic   projection  and  create  “2D”  image  tiles.  
Constant,  minimal  bandwidth  
regardless   of  the  complexity   of  the  
3D  city  model
MTh Markus  Jung,  2014
(Similar  approaches  were  already  done  by  Döllner et  al.  and  also  go  back  to  some  concepts  by  Sutherland)
2.5.2016Institute  of  Geomatics  Engineering 40
Display  in  the  Webbrowser as  “2D  Map”
MTh Markus  Jung,  2014
2.5.2016Institute  of  Geomatics  Engineering 41
Display  in  the  Webbrowser as  Panorama
MTh Markus  Jung,  2014
2.5.2016Institute  of  Geomatics  Engineering 42
High  Resolution  Geometry  doesn’t  matter:  Same  download/render  speed
MTh Markus  Jung,  2014
2.5.2016Institute  of  Geomatics  Engineering 43
The  3dmaps.ch  Project:  Bringing  it  all  together!
3DPS  (3D  Portrayal  Service)
2.5.2016Institute  of  Geomatics  Engineering 44
Viewer  API
map3d.js   Library
var map = new map3d.map("mapcanvas");
var layer = new map3d.imageLayer([
"http://t1.3dmaps.ch/tiles/teatime",
"http://t2.3dmaps.ch/tiles/teatime",
"http://t3.3dmaps.ch/tiles/teatime",
"http://t4.3dmaps.ch/tiles/teatime"]) });
layer.addTo(map);
var teapot_marker = new map3d.marker("Green Teapot", [0,0,0]);
teapot_marker.addTo(map);
var cube_maker = new map3d.marker("Green Cube", [80.5, 11.5, 10.5]);
cube_maker.addTo(map);
2.5.2016Institute  of  Geomatics  Engineering 45
Different  prerenderings for  different  pitch/view  direction
Every  Prerendering needs  storage,  but  with  todays  cloud  storage  pricing  this  is  not  really  an  issue  anymore!  
2.5.2016Institute  of  Geomatics  Engineering 46
Why  a  teapot  if  we  have  (open)  Geo  Data  ?!!
Use  case  1:  Rotterdam  Dataset
90  CityGML files  with  a  total  size  of  2.72  GB
26'474   textures  with  a  size  of  1024x1024,   an  uncompressed   total  data   volume  of  around   77  GB
Orthophoto uncompressed   430  GB
2.5.2016Institute  of  Geomatics  Engineering 47
Use  case  2:  The  Roman  city  of  Augusta  Raurica
A  digital  reconstruction  of  the  historical  Roman  City  of  Augusta  Raurica,  created  at  
the  institute  of  Geomatics Engineering at  the  FHNW.  3D-­Printed  to  create  a  bronze  
model.  
2.5.2016Institute  of  Geomatics  Engineering 48
The  3D  Model
About  4000  geospatial  objects  (buildings,  roads,  vegetation  features,  terrain,  …)  
at  three  levels  of  detail.  
3D  Geometry &  Textures  around  1  GB
2.5.2016Institute  of  Geomatics  Engineering 49
Prerendering the  Model:  Color  Map,  Normal  Map,  Id-­Map,  Depth  Map
Dynamic  Lighting
Normal   Map:  for  Object  Identification:  
Highlighting,   special  effects,  …
Depth  Map:   for  3D  Position,   special  effects,  …  
2.5.2016Institute  of  Geomatics  Engineering 50
3D  View  in  the  (mobile)  webbrowser with  dynamic  Lighting
2.5.2016Institute  of  Geomatics  Engineering 51
The  Viewer
• The  viewer  basically  uses  the  same  concepts  as  a  “2D  Map  Viewer”
• map3d.js  supports  WebGL
There  is  also  a  pure  canvas  version  available  as  fallback
• Operations  like  “highlighting”  are  highly  customizable.  Basically  it  is  an  image  
processing  operation  which  runs  on  the  GPU  (WebGL Version).  If  there  is  no  
WebGL available,  the  operation  is  done  using  JavaScript.
2.5.2016Institute  of  Geomatics  Engineering 52
Outlook  (1)
• Implement  more  effects  and  lighting  models,  
dynamic  snow/water/etc.  using  depth  map  &  normal  map
• Layer  management  (include  point  clouds,  mix  different  layers  using  depth  
map
• Add  realtime content  (“mix  real  3D  Object”)  using  depth-­map
• Release  map3d.js  as  Open  Source  (around  Q2/2016)
2.5.2016Institute  of  Geomatics  Engineering 53
Outlook  (2)
More  Rendering  Effects,  for  example  Screen  Space  Ambient  Occlusion  (SSAO)
BTh,  Daniel  Rettenmund 2015
2.5.2016Institute  of  Geomatics  Engineering 54
Outlook  (3)
• “isometric  maps”  will  be  one  of  many  features  of  OpenWebGlobe 2
• “isometric  maps”  will  be  the  default  3D  Viewer  in  OpenWebGlobe 2
• Switch  to  “real  3D”  anytime
• State  is  saved:  
• The  best  matching  viewpoint  is  selected  when  switching
• If  you  highlight  an  object  in  “isometric  mode”,  it  will  be  highlighted  in  
“Real  3D”  mode  too.
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 55
Conclusion
3  ways  to  use  3D  Graphics  in  Python  were  presented:
1. Using  Python  &  Blender  (including  Blender  Game  Engine)
2. Using  Low  a  Level  API  (OpenGL/WebGL)
3. Using  Python  to  process  3D  Views
Which  approach  is  the  best  for  Python  ?  This  really    depends  the  application  
domain.  
I  am  quite  sceptic  with  2.  -­ If  you  want  to  create  a  complex  3D  game,  I  don’t  
recommend  using  Python  at  this  time.
I  believe  Python  is  great  for  1.  and  3.
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 56
Next  Meetup:  February  9th,  2016  in  Muttenz (near  Basel)  18:00  to  21:00
http://www.pybasel.ch
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 57
1st GeoPython Conference
http://www.geopython.net
Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 58
Q&A

More Related Content

PDF
How will sidelink bring a new level of 5G versatility.pdf
PPTX
Fifth genration technology
PDF
Internet of Things, Innovation and India by Syam Madanapalli
PDF
How 5G Will Transform Industrial IoT
PPTX
Blue Eyes (Artificial Intelligence)
PPTX
Android presentation
PPTX
Android Internship report presentation
PDF
Android is NOT just 'Java on Linux'
How will sidelink bring a new level of 5G versatility.pdf
Fifth genration technology
Internet of Things, Innovation and India by Syam Madanapalli
How 5G Will Transform Industrial IoT
Blue Eyes (Artificial Intelligence)
Android presentation
Android Internship report presentation
Android is NOT just 'Java on Linux'

What's hot (20)

PPTX
5G Technology
PPTX
Android Programming Seminar
PPTX
Introduction to android
PPT
android phone ppt
PPTX
Touchless Touchscreen Technology
PPTX
Android Operating system
PDF
IOT Networks
PPTX
Android Application on Location sharing and message sender
PPTX
IoT Development - Opportunities and Challenges
PPT
Blue eyes technology
PDF
How NR based sidelink expands 5G C-V2X to support new advanced use cases
PPTX
Touchless Touchscreen
PDF
Ericsson 5 g platform
PDF
An Introduction to the Android Framework -- a core architecture view from app...
PPTX
Iot architecture
PDF
Technology trends towards 6G
PPTX
Convolutional Neural Networks
PPT
Blue eye technology ppt
PDF
Embedded Android Workshop
5G Technology
Android Programming Seminar
Introduction to android
android phone ppt
Touchless Touchscreen Technology
Android Operating system
IOT Networks
Android Application on Location sharing and message sender
IoT Development - Opportunities and Challenges
Blue eyes technology
How NR based sidelink expands 5G C-V2X to support new advanced use cases
Touchless Touchscreen
Ericsson 5 g platform
An Introduction to the Android Framework -- a core architecture view from app...
Iot architecture
Technology trends towards 6G
Convolutional Neural Networks
Blue eye technology ppt
Embedded Android Workshop
Ad

Viewers also liked (20)

PPTX
Minecraft in 500 lines with Pyglet - PyCon UK
PPTX
Minecraft in 500 lines of Python with Pyglet
PDF
Computação Gráfica em Python
PDF
Introduction to Game programming with PyGame Part 1
PDF
A Simple 3D Graphics Engine Written in Python and Allegro
KEY
Introduction to Game Programming Tutorial
ODP
Programming physics games with Python and OpenGL
PDF
Programando em python interfaces graficas com tk
PDF
Using SWIG to Control, Prototype, and Debug C Programs with Python
PDF
Python Interface Gráfica Tkinter
PDF
Processamento Digital de Imagens - Fundamentos e Aplicações
PDF
Interfacing C/C++ and Python with SWIG
PDF
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
PPT
Complex Intervention to Promote Uptake of School-based HPV Vaccination. Cris...
PDF
Shauna downs human_health_and_nutrition_security_in_australia
ODP
Microprocesadorrrrrrrr
PDF
1.3 food systems innovation presentation v2
PPT
B&i2013 donderdag 15.15_zaal_d_integral facade construction
PPTX
Is Heart Disease Contagious? Issues in Communicability and Chronic Disease
PPTX
My Visual Artworks from High School
Minecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines of Python with Pyglet
Computação Gráfica em Python
Introduction to Game programming with PyGame Part 1
A Simple 3D Graphics Engine Written in Python and Allegro
Introduction to Game Programming Tutorial
Programming physics games with Python and OpenGL
Programando em python interfaces graficas com tk
Using SWIG to Control, Prototype, and Debug C Programs with Python
Python Interface Gráfica Tkinter
Processamento Digital de Imagens - Fundamentos e Aplicações
Interfacing C/C++ and Python with SWIG
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
Complex Intervention to Promote Uptake of School-based HPV Vaccination. Cris...
Shauna downs human_health_and_nutrition_security_in_australia
Microprocesadorrrrrrrr
1.3 food systems innovation presentation v2
B&i2013 donderdag 15.15_zaal_d_integral facade construction
Is Heart Disease Contagious? Issues in Communicability and Chronic Disease
My Visual Artworks from High School
Ad

Similar to 3D Computer Graphics with Python (20)

PDF
Jeff Fischer - Python and IoT: From Chips and Bits to Data Science
PDF
Unleashing the Power of Python Using the New Minitab/Python Integration Modul...
PDF
Open frameworks 101_fitc
PDF
Hacking the Kinect with GAFFTA Day 1
PDF
Samsung SDS OpeniT - The possibility of Python
PPTX
Introduction to Machine Learning by MARK
PDF
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
PDF
6 surprising ways_to_use_jupyter_0
PDF
Using Data Science & Serverless Python to find apartment in Toronto
PDF
Scientific Visualization
PDF
PyWPS at COST WPS Workshop
KEY
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CA
ZIP
iPhone/iPad Development with Titanium
DOCX
Vipul divyanshu documentation on Kinect and Motion Tracking
PPTX
Going open source with small teams
PPSX
2020-06-25 Valofest - Introduction to SharePoint Spaces
PDF
Computer vision and Open CV
PPTX
Kinect kunkuk final_
PDF
The mag pi-issue-28-en
PPTX
Webinar - Analyzing Video
Jeff Fischer - Python and IoT: From Chips and Bits to Data Science
Unleashing the Power of Python Using the New Minitab/Python Integration Modul...
Open frameworks 101_fitc
Hacking the Kinect with GAFFTA Day 1
Samsung SDS OpeniT - The possibility of Python
Introduction to Machine Learning by MARK
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
6 surprising ways_to_use_jupyter_0
Using Data Science & Serverless Python to find apartment in Toronto
Scientific Visualization
PyWPS at COST WPS Workshop
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CA
iPhone/iPad Development with Titanium
Vipul divyanshu documentation on Kinect and Motion Tracking
Going open source with small teams
2020-06-25 Valofest - Introduction to SharePoint Spaces
Computer vision and Open CV
Kinect kunkuk final_
The mag pi-issue-28-en
Webinar - Analyzing Video

More from Martin Christen (15)

PDF
Opening Session GeoPython & Python Machine Learning Conference
PDF
EuroPython 2019: GeoSpatial Analysis using Python and JupyterHub
PPTX
Lightning Talk GeoBeer #25
PDF
High-Quality Server Side Rendering using the OGC’s 3D Portrayal Service – App...
PDF
Teaching with JupyterHub - lessons learned
PDF
Mixed Reality Anwendungen mit 3D-Stadtmodellen
PDF
Presentation final 72
PDF
Gettiing Started with IoT using Raspberry Pi and Python
PDF
Docker for Python Development
PDF
Visualisation of Complex 3D City Models on Mobile Webbrowsers Using Cloud-bas...
PPTX
OpenStreetMap in 3D using Python
PPTX
3d mit Python (PythonCamp)
PDF
Webilea: The OpenWebGlobe Project
PDF
OpenWebGlobe - GeoSharing Bern
PDF
GeoBeer July 3rd, 2013
Opening Session GeoPython & Python Machine Learning Conference
EuroPython 2019: GeoSpatial Analysis using Python and JupyterHub
Lightning Talk GeoBeer #25
High-Quality Server Side Rendering using the OGC’s 3D Portrayal Service – App...
Teaching with JupyterHub - lessons learned
Mixed Reality Anwendungen mit 3D-Stadtmodellen
Presentation final 72
Gettiing Started with IoT using Raspberry Pi and Python
Docker for Python Development
Visualisation of Complex 3D City Models on Mobile Webbrowsers Using Cloud-bas...
OpenStreetMap in 3D using Python
3d mit Python (PythonCamp)
Webilea: The OpenWebGlobe Project
OpenWebGlobe - GeoSharing Bern
GeoBeer July 3rd, 2013

Recently uploaded (20)

PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPT
Teaching material agriculture food technology
PDF
Modernizing your data center with Dell and AMD
PDF
Machine learning based COVID-19 study performance prediction
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PPTX
MYSQL Presentation for SQL database connectivity
PDF
GamePlan Trading System Review: Professional Trader's Honest Take
PPTX
Cloud computing and distributed systems.
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
KodekX | Application Modernization Development
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf
CIFDAQ's Market Insight: SEC Turns Pro Crypto
The Rise and Fall of 3GPP – Time for a Sabbatical?
Teaching material agriculture food technology
Modernizing your data center with Dell and AMD
Machine learning based COVID-19 study performance prediction
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
MYSQL Presentation for SQL database connectivity
GamePlan Trading System Review: Professional Trader's Honest Take
Cloud computing and distributed systems.
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
“AI and Expert System Decision Support & Business Intelligence Systems”
GDG Cloud Iasi [PUBLIC] Florian Blaga - Unveiling the Evolution of Cybersecur...
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Chapter 3 Spatial Domain Image Processing.pdf
KodekX | Application Modernization Development
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
solutions_manual_-_materials___processing_in_manufacturing__demargo_.pdf

3D Computer Graphics with Python

  • 1. Martin  Christen FHNW Hochschule   für  Architektur,  Bau  und  Geomatik Institut  Vermessung   und  Geoinformation [email protected] @MartinChristen 3D  Computer  Graphics  with Python „3D  Graphics  the Pythonic Way“ Swiss  Python  Summit
  • 2. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 2 About this talk In  this  talk  several  technologies  around  3D  graphics  for  Python  are  presented.   • A  brief  introduction  to  scripting  Blender shows  the  possibilities  of  creating   complex  3D  Worlds  and  games.   • The  second  part  shows  how  to  create  low  level  3D  applications  and  how   Python  is  used  to  create  preprocessed  3D  worlds  for  the  webbrowser.
  • 3. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 3 PART  I:  Python  and  Blender What  is  Blender  ? • Blender  is  a  free  and  open  source  3D  creation  suite  for: • Modelling • Animation • Simulation • Rendering • Video  Editing • Motion  Tracking • Game  Creation • …and  more..   • Runs  on  Linux,  MacOS and  Windows
  • 4. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 4 Cycles  Demo  Reel  (2015)  – All  made  with  Blender https://www.youtube.com/watch?v=wDRTjzLNK0g
  • 5. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 5 Blender  Motion  Tracking https://www.youtube.com/watch?v=2AvQiOf2IGA
  • 6. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 6 Python  Scripting  in  Blender Choose  the  Scripting  View:
  • 7. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 7 Python  Scripting  in  Blender Now  you  see  the  Python  3.x  console:
  • 8. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 8 The  first  program: Accessing  Data  is  quite  simple,  use  the  module  bpy.data: list(bpy.data.objects) list(bpy.data.scenes) list(bpy.data.materials) So  let’s  enter  the  following  in  the  Python  console: >>> list(bpy.data.objects)
  • 9. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 9 List  of  all  objects  in  the  scene: And  that  is  pretty  much  what  you  see in  the  scene  graph:
  • 10. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 10 Python  Scripting  in  Blender Open  the  Tab  in  the  3d  View  and  select  “Create”:
  • 11. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 11 Python  Scripting  in  Blender When  you  hold  mouse  over  “Cube”  you  will  see  the  Python  Command  how  to   create  a  cube!  Just  note  it  and  click  on  cube.
  • 12. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 12 Python  Scripting  in  Blender When  you  create  the  cube  you  will  see  the  exact  command  that  was  called  to   create  it.  You  see  most  actions  as  Python code  there.
  • 13. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 13 Python  Scripting  in  Blender:  Adding  (predefined)  Objects Right  click  on  the  text  (highligh)  and  copy  the  text  (ctrl-­c) bpy.ops.mesh.primitive_cube_add(radius=1, view_align=False, enter_editmode=False, location=(0, 0, 0), layers=(True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False)) Hit  undo  (ctrl-­z) And  now  we  modity the  command  using  location=(0,3,0)  and  radius=2: bpy.ops.mesh.primitve_cube_add(radius=2, location=(0,3,0))
  • 14. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 14 Python  Scripting  in  Blender:  Transform  objects If  we  move  the  new  cube  by  pressing  and  holding  the  blue  z-­Axis  we  can  see  the   following  command: bpy.ops.transform.translate(value=(0, 0, 3.10625), constraint_axis=(False, False, True), constraint_orientation='GLOBAL', mirror=False, proportional='DISABLED', proportional_edit_falloff='SMOOTH', proportional_size=1, release_confirm=True) That  is  how  an  object  is  translated
  • 15. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 15 Python  Scripting  in  Blender:  Operations Apply  Operations  like  Subdivision: bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.subdivide() bpy.ops.mesh.subdivide() bpy.ops.mesh.subdivide() bpy.ops.object.mode_set(mode=OBJECT')
  • 16. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 16 Creating  Meshes  for  example:  Tetrahedron import bpy s = 0.5**0.5 # 0.5*sqrt(2) verts = ((s,s,-1), (s,-s,-1), (-s,-s,-1), (-s,s,-1), (0,0,1)) faces = ((1,0,4), (4,2,1), (4,3,2), (4,0,3), (0,1,2,3)) mesh = bpy.data.meshes.new("TetrahedronMesh") object = bpy.data.objects.new("TetrahedronObject", mesh) object.location = (0,0,0) # origin scene = bpy.context.scene scene.objects.link(object) scene.objects.active = object object.select = True mesh.from_pydata(verts, [], faces) # vertices, edges, faces mesh.update()
  • 17. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 17 Real  Life  Example Using  Python  to  optimize  3D  objects: bpy.ops.object.select_all(action='DESELECT') bpy.context.scene.objects.active = bpy.data.objects[1] bpy.ops.object.select_all(action='SELECT') bpy.ops.object.join() bpy.ops.object.mode_set(mode='EDIT') bpy.ops.mesh.dissolve_limited() bpy.ops.mesh.remove_doubles(threshold=0.01) bpy.ops.mesh.select_all(action='DESELECT') bpy.ops.mesh.select_interior_faces() bpy.ops.mesh.delete(type='FACE') bpy.ops.object.mode_set(mode='OBJECT')
  • 18. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 18 Historic  Roman  City  “Augusta  Raurica”  – Generated  with  ESRI  City  Engine
  • 19. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 19 Cleaned  up:  Jour,  Remove  Double  Vertices/Faces,  Interior  Faces
  • 20. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 20 Final  Result  (125’929  triangles  optimized  to  56’216  triangles)
  • 21. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 21
  • 22. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 22 PART  II:  Low  Level  APIs • OpenGL API  bindings • Open  Graphics  Library -­ based on  C • http://pyopengl.sourceforge.net/ • DirectPython 11:  Direct3D  11  (Windows  only) • http://directpython11.sourceforge.net/ • Not  Cross  Platform
  • 23. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 23 PyOpenGL Supports  OpenGL  1.1  to 4.4 Works  with popular GUI  libraries,  for example: • wxPython • PyQT /  PySide • PyGTK • PyGame • Tkinter (+  Togl widget) I‘m not  going to make an  OpenGL  introduction here...
  • 24. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 24 How  OpenGL  Works Primitives   (=Points,  Linies,  Triangles)  are converted to Fragments  (Pixels). Program Vertex-­Operations (e.g.  projection,  transformation). Program Fragment-­Operations for shading/lighting/texturing. Vertex/Fragment  Shaders [run on  the GPU  and]  are written in  GLSL.
  • 25. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 25 Vispy:   http://vispy.org/ (  https://github.com/vispy/vispy ) VisPy is  a  young  library  under  heavy  development  at  this  time.  It  targets  two   categories  of  users: • Users  knowing  OpenGL,  or  willing  to  learn  OpenGL,  who  want  to  create   beautiful  and  fast  interactive  2D/3D  visualizations  in  Python  as  easily  as   possible. • Scientists  without  any  knowledge  of  OpenGL,  who  are  seeking  a  high-­level,   high-­performance  plotting  toolkit.
  • 26. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 26 Install  vispy 1) Numpy is  required 2) OpenGL  is  required 3) A  compatible  GUI  Toolkit  is  required Then: pip install vispy More  info:  http://vispy.org/installation.html
  • 27. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 27 Example,  lets  create  a  virtual  environment  named  “gl” python3.5 -m venv gl source gl/bin/activate pip install vispy # also installs numpy pip install pyglet …  do  your  stuff  … Deactivate
  • 28. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 28 Development  Version  (currently  0.5.0.dev0) git clone git://github.com/vispy/vispy.git cd vispy python3.5 setup.py develop (Only  this  version  support  Jupyter Notebook!)
  • 29. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 29 Windows on  Windows,  download  modules*  from: http://www.lfd.uci.edu/~gohlke/pythonlibs *)  vispy,  numpy &  pyglet
  • 30. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 30 Our  first  App import sys from vispy import app, gloo canvas = app.Canvas(app='pyglet', keys='interactive', size=(800, 600)) @canvas.connect def on_draw(event): gloo.set_clear_color((1.0, 0.0, 0.0, 1.0)) gloo.clear() canvas.show() if __name__ == '__main__': app.run()
  • 31. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 31 Use  Shaders,  Geometry
  • 32. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 32 Jupyter Notebook  (WebGL Output)
  • 33. • Virtual  Globe using WebGL • Open  Source  Project  started in   April  2011 • JavaScript  Library  for rapid   developmentof web-­based geospatial 3D  applications • Data  Processing  in  Python 332.5.2016 33 Python  for Data  Processing Institute  of  Geomatics  Engineering
  • 34. 2.5.2016Institute  of  Geomatics  Engineering 34 Demo
  • 35. 2.5.2016Institute  of  Geomatics  Engineering Streaming  3D-­Geometry  Tiles MapData  ©  OpenStreetMap  contributors 35 BTh Hürbi/Daetwyler,  MTh Lucas  Oertli,  2013
  • 36. 2.5.2016Institute  of  Geomatics  Engineering 36 Streaming  Example:  3D  Geometry  using  OSM  and  “BOI”  (worldwide   streaming) MTh Lucas  Oertli,  2013
  • 37. 2.5.2016Institute  of  Geomatics  Engineering 37 Streaming  Example:  Osnabrück (local  streaming) Created  by  Geoplex with  Plexmap,  based  on  OpenWebGlobe
  • 38. 2.5.2016Institute  of  Geomatics  Engineering 38 Some  Problems  I  have  with  (Web-­Based)  Virtual  Globes • Unfortunately,   WebGL compatibility  is  still  an  issue…  a  “fallback”  is  required • Most  people   still  prefer  2D  Maps • Navigation   in  3D  is  too  complicated  for  many  users… • In  the  “Geo-­World”,   3D  Models  are  usually  not  built  by  3D  game   designers: • Often  there   are  “too  many”  &  “too  big”  textures  per  object • Different  details  per  3D-­object • Remember   “Google   3D  Warehouse” • Level  of  Detail:  Generalization   in  2D  is  accepted,    but  not  in  3D! • Limited  number   of  people   actually  do  have  data  of  the  whole  world… • Most  virtual  globe   based  applications  I  know  are  limited  to  a  certain  region/country/… • Too  slow  (bandwidth/3D   rendering)   on  mobile  devices • Too  power   consuming  on  mobile  devices
  • 39. 2.5.2016Institute  of  Geomatics  Engineering 39 Bringing  together  2D  Maps  and  3D  Globes Concept:  Prerender a  3D  Scene  using  a  high  quality  offline  3D  renderer  using  an   orthographic   projection  and  create  “2D”  image  tiles.   Constant,  minimal  bandwidth   regardless   of  the  complexity   of  the   3D  city  model MTh Markus  Jung,  2014 (Similar  approaches  were  already  done  by  Döllner et  al.  and  also  go  back  to  some  concepts  by  Sutherland)
  • 40. 2.5.2016Institute  of  Geomatics  Engineering 40 Display  in  the  Webbrowser as  “2D  Map” MTh Markus  Jung,  2014
  • 41. 2.5.2016Institute  of  Geomatics  Engineering 41 Display  in  the  Webbrowser as  Panorama MTh Markus  Jung,  2014
  • 42. 2.5.2016Institute  of  Geomatics  Engineering 42 High  Resolution  Geometry  doesn’t  matter:  Same  download/render  speed MTh Markus  Jung,  2014
  • 43. 2.5.2016Institute  of  Geomatics  Engineering 43 The  3dmaps.ch  Project:  Bringing  it  all  together! 3DPS  (3D  Portrayal  Service)
  • 44. 2.5.2016Institute  of  Geomatics  Engineering 44 Viewer  API map3d.js   Library var map = new map3d.map("mapcanvas"); var layer = new map3d.imageLayer([ "http://t1.3dmaps.ch/tiles/teatime", "http://t2.3dmaps.ch/tiles/teatime", "http://t3.3dmaps.ch/tiles/teatime", "http://t4.3dmaps.ch/tiles/teatime"]) }); layer.addTo(map); var teapot_marker = new map3d.marker("Green Teapot", [0,0,0]); teapot_marker.addTo(map); var cube_maker = new map3d.marker("Green Cube", [80.5, 11.5, 10.5]); cube_maker.addTo(map);
  • 45. 2.5.2016Institute  of  Geomatics  Engineering 45 Different  prerenderings for  different  pitch/view  direction Every  Prerendering needs  storage,  but  with  todays  cloud  storage  pricing  this  is  not  really  an  issue  anymore!  
  • 46. 2.5.2016Institute  of  Geomatics  Engineering 46 Why  a  teapot  if  we  have  (open)  Geo  Data  ?!! Use  case  1:  Rotterdam  Dataset 90  CityGML files  with  a  total  size  of  2.72  GB 26'474   textures  with  a  size  of  1024x1024,   an  uncompressed   total  data   volume  of  around   77  GB Orthophoto uncompressed   430  GB
  • 47. 2.5.2016Institute  of  Geomatics  Engineering 47 Use  case  2:  The  Roman  city  of  Augusta  Raurica A  digital  reconstruction  of  the  historical  Roman  City  of  Augusta  Raurica,  created  at   the  institute  of  Geomatics Engineering at  the  FHNW.  3D-­Printed  to  create  a  bronze   model.  
  • 48. 2.5.2016Institute  of  Geomatics  Engineering 48 The  3D  Model About  4000  geospatial  objects  (buildings,  roads,  vegetation  features,  terrain,  …)   at  three  levels  of  detail.   3D  Geometry &  Textures  around  1  GB
  • 49. 2.5.2016Institute  of  Geomatics  Engineering 49 Prerendering the  Model:  Color  Map,  Normal  Map,  Id-­Map,  Depth  Map Dynamic  Lighting Normal   Map:  for  Object  Identification:   Highlighting,   special  effects,  … Depth  Map:   for  3D  Position,   special  effects,  …  
  • 50. 2.5.2016Institute  of  Geomatics  Engineering 50 3D  View  in  the  (mobile)  webbrowser with  dynamic  Lighting
  • 51. 2.5.2016Institute  of  Geomatics  Engineering 51 The  Viewer • The  viewer  basically  uses  the  same  concepts  as  a  “2D  Map  Viewer” • map3d.js  supports  WebGL There  is  also  a  pure  canvas  version  available  as  fallback • Operations  like  “highlighting”  are  highly  customizable.  Basically  it  is  an  image   processing  operation  which  runs  on  the  GPU  (WebGL Version).  If  there  is  no   WebGL available,  the  operation  is  done  using  JavaScript.
  • 52. 2.5.2016Institute  of  Geomatics  Engineering 52 Outlook  (1) • Implement  more  effects  and  lighting  models,   dynamic  snow/water/etc.  using  depth  map  &  normal  map • Layer  management  (include  point  clouds,  mix  different  layers  using  depth   map • Add  realtime content  (“mix  real  3D  Object”)  using  depth-­map • Release  map3d.js  as  Open  Source  (around  Q2/2016)
  • 53. 2.5.2016Institute  of  Geomatics  Engineering 53 Outlook  (2) More  Rendering  Effects,  for  example  Screen  Space  Ambient  Occlusion  (SSAO) BTh,  Daniel  Rettenmund 2015
  • 54. 2.5.2016Institute  of  Geomatics  Engineering 54 Outlook  (3) • “isometric  maps”  will  be  one  of  many  features  of  OpenWebGlobe 2 • “isometric  maps”  will  be  the  default  3D  Viewer  in  OpenWebGlobe 2 • Switch  to  “real  3D”  anytime • State  is  saved:   • The  best  matching  viewpoint  is  selected  when  switching • If  you  highlight  an  object  in  “isometric  mode”,  it  will  be  highlighted  in   “Real  3D”  mode  too.
  • 55. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 55 Conclusion 3  ways  to  use  3D  Graphics  in  Python  were  presented: 1. Using  Python  &  Blender  (including  Blender  Game  Engine) 2. Using  Low  a  Level  API  (OpenGL/WebGL) 3. Using  Python  to  process  3D  Views Which  approach  is  the  best  for  Python  ?  This  really    depends  the  application   domain.   I  am  quite  sceptic  with  2.  -­ If  you  want  to  create  a  complex  3D  game,  I  don’t   recommend  using  Python  at  this  time. I  believe  Python  is  great  for  1.  and  3.
  • 56. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 56 Next  Meetup:  February  9th,  2016  in  Muttenz (near  Basel)  18:00  to  21:00 http://www.pybasel.ch
  • 57. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 57 1st GeoPython Conference http://www.geopython.net
  • 58. Swiss  Python  Summit,  February  5,  2016Institut  Vermessung  und  Geoinformation 58 Q&A