SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...NTT DATA Technology & Innovation
 
C. Sotiriou, Vodafone Greece: Adopting Quarkus for the digital experience layer
C. Sotiriou, Vodafone Greece: Adopting Quarkus for the digital experience layerC. Sotiriou, Vodafone Greece: Adopting Quarkus for the digital experience layer
C. Sotiriou, Vodafone Greece: Adopting Quarkus for the digital experience layerUni Systems S.M.S.A.
 
Robotic Process Automation With Blue Prism
Robotic Process Automation With Blue PrismRobotic Process Automation With Blue Prism
Robotic Process Automation With Blue PrismSpotle.ai
 
ブロックチェーン統合ツールCactusとトークンエコノミー実現への期待
ブロックチェーン統合ツールCactusとトークンエコノミー実現への期待ブロックチェーン統合ツールCactusとトークンエコノミー実現への期待
ブロックチェーン統合ツールCactusとトークンエコノミー実現への期待Hyperleger Tokyo Meetup
 
Qu'est-ce que la blockchain ?
Qu'est-ce que la blockchain ?Qu'est-ce que la blockchain ?
Qu'est-ce que la blockchain ?Jedha Bootcamp
 
Blockchain-based Solutions for Identity & Access Management
Blockchain-based Solutions for Identity & Access ManagementBlockchain-based Solutions for Identity & Access Management
Blockchain-based Solutions for Identity & Access ManagementPrabath Siriwardena
 
The Blockchain - The Technology behind Bitcoin
The Blockchain - The Technology behind Bitcoin The Blockchain - The Technology behind Bitcoin
The Blockchain - The Technology behind Bitcoin Jérôme Kehrli
 
Blockchain
BlockchainBlockchain
BlockchainSai Nath
 
Blockchain and Cryptocurrencies
Blockchain and CryptocurrenciesBlockchain and Cryptocurrencies
Blockchain and CryptocurrenciesnimeshQ
 
Blockchain overview, use cases, implementations and challenges
Blockchain overview, use cases, implementations and challengesBlockchain overview, use cases, implementations and challenges
Blockchain overview, use cases, implementations and challengesSébastien Tandel
 
Introduction to Filecoin
Introduction to Filecoin   Introduction to Filecoin
Introduction to Filecoin Vanessa Lošić
 
Pcapngを読んでみる
Pcapngを読んでみるPcapngを読んでみる
Pcapngを読んでみるYagi Shinnosuke
 
"OPEN NETWORKING" に向けた Management / Data Plane の動向
"OPEN NETWORKING" に向けた Management / Data Plane の動向"OPEN NETWORKING" に向けた Management / Data Plane の動向
"OPEN NETWORKING" に向けた Management / Data Plane の動向Kentaro Ebisawa
 
Blockchain Fundamentals for Beginners - 101 Blockchains
Blockchain Fundamentals for Beginners - 101 BlockchainsBlockchain Fundamentals for Beginners - 101 Blockchains
Blockchain Fundamentals for Beginners - 101 Blockchains101 Blockchains Academy
 

Was ist angesagt? (20)

第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)
第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)
第31回「今アツい、分散ストレージを語ろう」(2013/11/28 on しすなま!)
 
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
実践!OpenTelemetry と OSS を使った Observability 基盤の構築(CloudNative Days Tokyo 2022 発...
 
C. Sotiriou, Vodafone Greece: Adopting Quarkus for the digital experience layer
C. Sotiriou, Vodafone Greece: Adopting Quarkus for the digital experience layerC. Sotiriou, Vodafone Greece: Adopting Quarkus for the digital experience layer
C. Sotiriou, Vodafone Greece: Adopting Quarkus for the digital experience layer
 
Robotic Process Automation With Blue Prism
Robotic Process Automation With Blue PrismRobotic Process Automation With Blue Prism
Robotic Process Automation With Blue Prism
 
ブロックチェーン統合ツールCactusとトークンエコノミー実現への期待
ブロックチェーン統合ツールCactusとトークンエコノミー実現への期待ブロックチェーン統合ツールCactusとトークンエコノミー実現への期待
ブロックチェーン統合ツールCactusとトークンエコノミー実現への期待
 
Qu'est-ce que la blockchain ?
Qu'est-ce que la blockchain ?Qu'est-ce que la blockchain ?
Qu'est-ce que la blockchain ?
 
Blockchain-based Solutions for Identity & Access Management
Blockchain-based Solutions for Identity & Access ManagementBlockchain-based Solutions for Identity & Access Management
Blockchain-based Solutions for Identity & Access Management
 
AWS CognitoからAuth0への移行パターン4つ
AWS CognitoからAuth0への移行パターン4つAWS CognitoからAuth0への移行パターン4つ
AWS CognitoからAuth0への移行パターン4つ
 
TripleO Deep Dive 1.1
TripleO Deep Dive 1.1TripleO Deep Dive 1.1
TripleO Deep Dive 1.1
 
The Blockchain - The Technology behind Bitcoin
The Blockchain - The Technology behind Bitcoin The Blockchain - The Technology behind Bitcoin
The Blockchain - The Technology behind Bitcoin
 
Blockchain
BlockchainBlockchain
Blockchain
 
Blockchain and Cryptocurrencies
Blockchain and CryptocurrenciesBlockchain and Cryptocurrencies
Blockchain and Cryptocurrencies
 
Blockchain overview, use cases, implementations and challenges
Blockchain overview, use cases, implementations and challengesBlockchain overview, use cases, implementations and challenges
Blockchain overview, use cases, implementations and challenges
 
Introduction to Filecoin
Introduction to Filecoin   Introduction to Filecoin
Introduction to Filecoin
 
Smart contracts & dApps
Smart contracts & dAppsSmart contracts & dApps
Smart contracts & dApps
 
Understanding Blockchain
Understanding BlockchainUnderstanding Blockchain
Understanding Blockchain
 
Pcapngを読んでみる
Pcapngを読んでみるPcapngを読んでみる
Pcapngを読んでみる
 
自宅インフラの育て方 第2回
自宅インフラの育て方 第2回自宅インフラの育て方 第2回
自宅インフラの育て方 第2回
 
"OPEN NETWORKING" に向けた Management / Data Plane の動向
"OPEN NETWORKING" に向けた Management / Data Plane の動向"OPEN NETWORKING" に向けた Management / Data Plane の動向
"OPEN NETWORKING" に向けた Management / Data Plane の動向
 
Blockchain Fundamentals for Beginners - 101 Blockchains
Blockchain Fundamentals for Beginners - 101 BlockchainsBlockchain Fundamentals for Beginners - 101 Blockchains
Blockchain Fundamentals for Beginners - 101 Blockchains
 

Andere mochten auch

Minecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UKMinecraft in 500 lines with Pyglet - PyCon UK
Minecraft in 500 lines with Pyglet - PyCon UKRichard Donkin
 
Minecraft in 500 lines of Python with Pyglet
Minecraft in 500 lines of Python with PygletMinecraft in 500 lines of Python with Pyglet
Minecraft in 500 lines of Python with PygletRichard Donkin
 
Computação Gráfica em Python
Computação Gráfica em PythonComputação Gráfica em Python
Computação Gráfica em Pythongsroma
 
Introduction to Game programming with PyGame Part 1
Introduction to Game programming with PyGame Part 1Introduction to Game programming with PyGame Part 1
Introduction to Game programming with PyGame Part 1Abhishek Mishra
 
A Simple 3D Graphics Engine Written in Python and Allegro
A Simple 3D Graphics Engine Written in Python and AllegroA Simple 3D Graphics Engine Written in Python and Allegro
A Simple 3D Graphics Engine Written in Python and Allegrosnowfarthing
 
Introduction to Game Programming Tutorial
Introduction to Game Programming TutorialIntroduction to Game Programming Tutorial
Introduction to Game Programming TutorialRichard Jones
 
Programming physics games with Python and OpenGL
Programming physics games with Python and OpenGLProgramming physics games with Python and OpenGL
Programming physics games with Python and OpenGLDaniel Pope
 
Programando em python interfaces graficas com tk
Programando em python   interfaces graficas com tkProgramando em python   interfaces graficas com tk
Programando em python interfaces graficas com tksamuelthiago
 
Using SWIG to Control, Prototype, and Debug C Programs with Python
Using SWIG to Control, Prototype, and Debug C Programs with PythonUsing SWIG to Control, Prototype, and Debug C Programs with Python
Using SWIG to Control, Prototype, and Debug C Programs with PythonDavid Beazley (Dabeaz LLC)
 
Processamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e AplicaçõesProcessamento Digital de Imagens - Fundamentos e Aplicações
Processamento Digital de Imagens - Fundamentos e AplicaçõesAldisio Medeiros
 
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...
PLOTCON NYC: The Architecture of Jupyter: Protocols for Interactive Data Expl...Plotly
 
Microprocesadorrrrrrrr
MicroprocesadorrrrrrrrMicroprocesadorrrrrrrr
MicroprocesadorrrrrrrrTeresaBosca
 
B&i2013 donderdag 15.15_zaal_d_integral facade construction
B&i2013 donderdag 15.15_zaal_d_integral facade constructionB&i2013 donderdag 15.15_zaal_d_integral facade construction
B&i2013 donderdag 15.15_zaal_d_integral facade constructionBouwmaterialen_Innovatie
 
Is Heart Disease Contagious? Issues in Communicability and Chronic Disease
Is Heart Disease Contagious? Issues in Communicability and Chronic DiseaseIs Heart Disease Contagious? Issues in Communicability and Chronic Disease
Is Heart Disease Contagious? Issues in Communicability and Chronic DiseaseColumbiaPublicHealth
 
My Visual Artworks from High School
My Visual Artworks from High SchoolMy Visual Artworks from High School
My Visual Artworks from High SchoolSarah Liddemore
 

Andere mochten auch (20)

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

Ähnlich wie 3D Computer Graphics with Python

Jeff Fischer - Python and IoT: From Chips and Bits to Data Science
Jeff Fischer - Python and IoT: From Chips and Bits to Data ScienceJeff Fischer - Python and IoT: From Chips and Bits to Data Science
Jeff Fischer - Python and IoT: From Chips and Bits to Data SciencePyData
 
Unleashing the Power of Python Using the New Minitab/Python Integration Modul...
Unleashing the Power of Python Using the New Minitab/Python Integration Modul...Unleashing the Power of Python Using the New Minitab/Python Integration Modul...
Unleashing the Power of Python Using the New Minitab/Python Integration Modul...Minitab, LLC
 
Open frameworks 101_fitc
Open frameworks 101_fitcOpen frameworks 101_fitc
Open frameworks 101_fitcbenDesigning
 
Hacking the Kinect with GAFFTA Day 1
Hacking the Kinect with GAFFTA Day 1Hacking the Kinect with GAFFTA Day 1
Hacking the Kinect with GAFFTA Day 1benDesigning
 
Samsung SDS OpeniT - The possibility of Python
Samsung SDS OpeniT - The possibility of PythonSamsung SDS OpeniT - The possibility of Python
Samsung SDS OpeniT - The possibility of PythonInsuk (Chris) Cho
 
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」Tsukasa Sugiura
 
6 surprising ways_to_use_jupyter_0
6 surprising ways_to_use_jupyter_06 surprising ways_to_use_jupyter_0
6 surprising ways_to_use_jupyter_0Weghlis Azzariou
 
Using Data Science & Serverless Python to find apartment in Toronto
Using Data Science & Serverless Python to find apartment in TorontoUsing Data Science & Serverless Python to find apartment in Toronto
Using Data Science & Serverless Python to find apartment in TorontoDaniel Zivkovic
 
Scientific Visualization
Scientific VisualizationScientific Visualization
Scientific VisualizationJosef Heinen
 
PyWPS at COST WPS Workshop
PyWPS at COST WPS WorkshopPyWPS at COST WPS Workshop
PyWPS at COST WPS WorkshopJachym Cepicky
 
iPhone/iPad Development with Titanium
iPhone/iPad Development with TitaniumiPhone/iPad Development with Titanium
iPhone/iPad Development with TitaniumAxway Appcelerator
 
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CA
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CAAppcelerator iPhone/iPad Dev Con 2010 San Diego, CA
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CAJeff Haynie
 
Vipul divyanshu documentation on Kinect and Motion Tracking
Vipul divyanshu documentation  on Kinect and Motion TrackingVipul divyanshu documentation  on Kinect and Motion Tracking
Vipul divyanshu documentation on Kinect and Motion TrackingVipul Divyanshu
 
Going open source with small teams
Going open source with small teamsGoing open source with small teams
Going open source with small teamsJamie Thomas
 
2020-06-25 Valofest - Introduction to SharePoint Spaces
2020-06-25 Valofest - Introduction to SharePoint Spaces2020-06-25 Valofest - Introduction to SharePoint Spaces
2020-06-25 Valofest - Introduction to SharePoint SpacesPatrick Guimonet
 
Computer vision and Open CV
Computer vision and Open CVComputer vision and Open CV
Computer vision and Open CVChariza Pladin
 
Kinect kunkuk final_
Kinect kunkuk final_Kinect kunkuk final_
Kinect kunkuk final_Yunkyu Choi
 
The mag pi-issue-28-en
The mag pi-issue-28-enThe mag pi-issue-28-en
The mag pi-issue-28-enNguyen Nam
 
Webinar - Analyzing Video
Webinar - Analyzing VideoWebinar - Analyzing Video
Webinar - Analyzing VideoTuri, Inc.
 
Dynamic Graph Plotting with WPF
Dynamic Graph Plotting with WPFDynamic Graph Plotting with WPF
Dynamic Graph Plotting with WPFIJERD Editor
 

Ähnlich wie 3D Computer Graphics with Python (20)

Jeff Fischer - Python and IoT: From Chips and Bits to Data Science
Jeff Fischer - Python and IoT: From Chips and Bits to Data ScienceJeff Fischer - Python and IoT: From Chips and Bits to Data Science
Jeff Fischer - Python and IoT: From Chips and Bits to Data Science
 
Unleashing the Power of Python Using the New Minitab/Python Integration Modul...
Unleashing the Power of Python Using the New Minitab/Python Integration Modul...Unleashing the Power of Python Using the New Minitab/Python Integration Modul...
Unleashing the Power of Python Using the New Minitab/Python Integration Modul...
 
Open frameworks 101_fitc
Open frameworks 101_fitcOpen frameworks 101_fitc
Open frameworks 101_fitc
 
Hacking the Kinect with GAFFTA Day 1
Hacking the Kinect with GAFFTA Day 1Hacking the Kinect with GAFFTA Day 1
Hacking the Kinect with GAFFTA Day 1
 
Samsung SDS OpeniT - The possibility of Python
Samsung SDS OpeniT - The possibility of PythonSamsung SDS OpeniT - The possibility of Python
Samsung SDS OpeniT - The possibility of Python
 
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
第38回 名古屋CV・PRML勉強会 「Kinect v2本の紹介とPCLの概要」
 
6 surprising ways_to_use_jupyter_0
6 surprising ways_to_use_jupyter_06 surprising ways_to_use_jupyter_0
6 surprising ways_to_use_jupyter_0
 
Using Data Science & Serverless Python to find apartment in Toronto
Using Data Science & Serverless Python to find apartment in TorontoUsing Data Science & Serverless Python to find apartment in Toronto
Using Data Science & Serverless Python to find apartment in Toronto
 
Scientific Visualization
Scientific VisualizationScientific Visualization
Scientific Visualization
 
PyWPS at COST WPS Workshop
PyWPS at COST WPS WorkshopPyWPS at COST WPS Workshop
PyWPS at COST WPS Workshop
 
iPhone/iPad Development with Titanium
iPhone/iPad Development with TitaniumiPhone/iPad Development with Titanium
iPhone/iPad Development with Titanium
 
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CA
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CAAppcelerator iPhone/iPad Dev Con 2010 San Diego, CA
Appcelerator iPhone/iPad Dev Con 2010 San Diego, CA
 
Vipul divyanshu documentation on Kinect and Motion Tracking
Vipul divyanshu documentation  on Kinect and Motion TrackingVipul divyanshu documentation  on Kinect and Motion Tracking
Vipul divyanshu documentation on Kinect and Motion Tracking
 
Going open source with small teams
Going open source with small teamsGoing open source with small teams
Going open source with small teams
 
2020-06-25 Valofest - Introduction to SharePoint Spaces
2020-06-25 Valofest - Introduction to SharePoint Spaces2020-06-25 Valofest - Introduction to SharePoint Spaces
2020-06-25 Valofest - Introduction to SharePoint Spaces
 
Computer vision and Open CV
Computer vision and Open CVComputer vision and Open CV
Computer vision and Open CV
 
Kinect kunkuk final_
Kinect kunkuk final_Kinect kunkuk final_
Kinect kunkuk final_
 
The mag pi-issue-28-en
The mag pi-issue-28-enThe mag pi-issue-28-en
The mag pi-issue-28-en
 
Webinar - Analyzing Video
Webinar - Analyzing VideoWebinar - Analyzing Video
Webinar - Analyzing Video
 
Dynamic Graph Plotting with WPF
Dynamic Graph Plotting with WPFDynamic Graph Plotting with WPF
Dynamic Graph Plotting with WPF
 

Mehr von Martin Christen

Opening Session GeoPython & Python Machine Learning Conference
Opening Session GeoPython & Python Machine Learning Conference Opening Session GeoPython & Python Machine Learning Conference
Opening Session GeoPython & Python Machine Learning Conference Martin Christen
 
EuroPython 2019: GeoSpatial Analysis using Python and JupyterHub
EuroPython 2019: GeoSpatial Analysis using Python and JupyterHubEuroPython 2019: GeoSpatial Analysis using Python and JupyterHub
EuroPython 2019: GeoSpatial Analysis using Python and JupyterHubMartin Christen
 
Lightning Talk GeoBeer #25
Lightning Talk GeoBeer #25Lightning Talk GeoBeer #25
Lightning Talk GeoBeer #25Martin Christen
 
High-Quality Server Side Rendering using the OGC’s 3D Portrayal Service – App...
High-Quality Server Side Rendering using the OGC’s 3D Portrayal Service – App...High-Quality Server Side Rendering using the OGC’s 3D Portrayal Service – App...
High-Quality Server Side Rendering using the OGC’s 3D Portrayal Service – App...Martin Christen
 
Teaching with JupyterHub - lessons learned
Teaching with JupyterHub - lessons learnedTeaching with JupyterHub - lessons learned
Teaching with JupyterHub - lessons learnedMartin Christen
 
Mixed Reality Anwendungen mit 3D-Stadtmodellen
Mixed Reality Anwendungen mit 3D-StadtmodellenMixed Reality Anwendungen mit 3D-Stadtmodellen
Mixed Reality Anwendungen mit 3D-StadtmodellenMartin Christen
 
Gettiing Started with IoT using Raspberry Pi and Python
Gettiing Started with IoT using Raspberry Pi and PythonGettiing Started with IoT using Raspberry Pi and Python
Gettiing Started with IoT using Raspberry Pi and PythonMartin Christen
 
Docker for Python Development
Docker for Python DevelopmentDocker for Python Development
Docker for Python DevelopmentMartin Christen
 
Visualisation of Complex 3D City Models on Mobile Webbrowsers Using Cloud-bas...
Visualisation of Complex 3D City Models on Mobile Webbrowsers Using Cloud-bas...Visualisation of Complex 3D City Models on Mobile Webbrowsers Using Cloud-bas...
Visualisation of Complex 3D City Models on Mobile Webbrowsers Using Cloud-bas...Martin Christen
 
OpenStreetMap in 3D using Python
OpenStreetMap in 3D using PythonOpenStreetMap in 3D using Python
OpenStreetMap in 3D using PythonMartin Christen
 
3d mit Python (PythonCamp)
3d mit Python (PythonCamp)3d mit Python (PythonCamp)
3d mit Python (PythonCamp)Martin Christen
 
Webilea: The OpenWebGlobe Project
Webilea: The OpenWebGlobe ProjectWebilea: The OpenWebGlobe Project
Webilea: The OpenWebGlobe ProjectMartin Christen
 
OpenWebGlobe - GeoSharing Bern
OpenWebGlobe - GeoSharing BernOpenWebGlobe - GeoSharing Bern
OpenWebGlobe - GeoSharing BernMartin Christen
 

Mehr von Martin Christen (15)

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

Kürzlich hochgeladen

What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????blackmambaettijean
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 

Kürzlich hochgeladen (20)

What is Artificial Intelligence?????????
What is Artificial Intelligence?????????What is Artificial Intelligence?????????
What is Artificial Intelligence?????????
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 

3D Computer Graphics with Python

  • 1. 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
  • 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