Source code for director.skybox

import director.visualization as vis
from director import filterUtils
import director.vtkAll as vtk
import director.vtkNumpy as vnp
from director.shallowCopy import shallowCopy
from director import ioUtils
import numpy as np


[docs]def createTexturedPlane(): source = vtk.vtkPlaneSource() textureMap = vtk.vtkTextureMapToPlane() textureMap.SetInput(source.GetOutput()) textureMap.Update() return shallowCopy(textureMap.GetOutput())
[docs]def getSkyboxSides(): return ['top', 'bottom', 'front', 'back', 'left', 'right']
[docs]def createSkyboxPlane(side): pd = createTexturedPlane() t = vtk.vtkTransform() t.PostMultiply() if side == 'top': t.Translate(0,0,0.5) t.RotateZ(180) elif side == 'bottom': t.RotateX(180) t.RotateY(180) t.RotateZ(-270) t.Translate(0,0,-0.5) elif side == 'front': t.RotateY(90) t.RotateX(90) t.RotateZ(180) t.Translate(0.5,0.0,0.0) elif side == 'back': t.RotateY(90) t.RotateX(90) t.RotateZ(0) t.Translate(-0.5,0.0,0.0) elif side == 'left': t.RotateY(90) t.RotateX(90) t.RotateZ(-90) t.Translate(0.0,0.5,0.0) elif side == 'right': t.RotateY(90) t.RotateX(90) t.RotateZ(90) t.Translate(0.0,-0.5,0.0) pd = filterUtils.transformPolyData(pd, t) return pd
[docs]def createSkyboxPlanes(): planes = {} for side in getSkyboxSides(): planes[side] = createSkyboxPlane(side) return planes
[docs]def createTexture(imageFilename): image = ioUtils.readImage(imageFilename) tex = vtk.vtkTexture() tex.SetInput(image) tex.EdgeClampOn() tex.RepeatOff() return tex
[docs]def createSkybox(imageMap, view): objs = {} planes = createSkyboxPlanes() for side, imageFilename in imageMap.iteritems(): texture = createTexture(imageFilename) obj = vis.PolyDataItem('skybox %s' % side, planes[side], view=None) obj.actor.SetTexture(texture) obj.actor.GetProperty().LightingOff() view.backgroundRenderer().AddActor(obj.actor) objs[side] = obj return objs
[docs]def getSkyboxImages(baseDir): imageMap = dict( top = baseDir + '/topmars1.jpg', bottom = baseDir + '/botmars1.jpg', front = baseDir + '/frontmars1.jpg', back = baseDir + '/backmars1.jpg', left = baseDir + '/leftmars1.jpg', right = baseDir + '/rightmars1.jpg') return imageMap
[docs]def createTextureGround(imageFilename, view): pd = createTexturedPlane() texture = createTexture(imageFilename) texture.RepeatOn() tcoords = vnp.getNumpyFromVtk(pd, 'Texture Coordinates') tcoords *= 60 t = vtk.vtkTransform() t.PostMultiply() t.Scale(200,200,200) t.Translate(0,0,-0.005) pd = filterUtils.transformPolyData(pd, t) obj = vis.showPolyData(pd, 'ground', view=view, alpha=1.0, parent='skybox') obj.actor.SetTexture(texture) obj.actor.GetProperty().LightingOff()
[docs]def connectSkyboxCamera(view, debug=False): baseRen = view.backgroundRenderer() def updateSkyboxCamera(o, e): c = baseRen.GetActiveCamera() c2 = view.camera() viewDirection = np.array(c2.GetFocalPoint()) - np.array(c2.GetPosition()) viewDirection /= np.linalg.norm(viewDirection) if debug: c.SetPosition(c2.GetPosition()) c.SetFocalPoint(c2.GetFocalPoint()) else: c.SetPosition(0,0,0) c.SetFocalPoint(viewDirection) c.SetViewUp(c2.GetViewUp()) c.SetViewAngle(c2.GetViewAngle()) view.renderWindow().AddObserver('StartEvent', updateSkyboxCamera)