DangerOnTheRanger

Untitled

Nov 6th, 2011
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.80 KB | None | 0 0
  1. from panda3d.core import *
  2. import sys,os
  3. loadPrcFileData("", 'show-frame-rate-meter #t')
  4. loadPrcFileData("", 'basic-shaders-only #t')
  5.  
  6. import direct.directbase.DirectStart
  7. from direct.filter.CommonFilters import *
  8. from direct.interval.IntervalGlobal import *
  9. from direct.gui.DirectGui import OnscreenText
  10. from direct.showbase.DirectObject import DirectObject
  11. from direct.actor import Actor
  12. from random import *
  13. from math import sin
  14.  
  15. # Function to put instructions on the screen.
  16. def addInstructions(pos, msg):
  17.     return OnscreenText(text=msg, style=1, fg=(1,1,1,1), mayChange=1,
  18.                         pos=(-1.3, pos), align=TextNode.ALeft, scale = .05, shadow=(0,0,0,1), shadowOffset=(0.1,0.1))
  19.  
  20. # Function to put title on the screen.
  21. def addTitle(text):
  22.     return OnscreenText(text=text, style=1, fg=(1,1,1,1),
  23.                         pos=(1.3,-0.95), align=TextNode.ARight, scale = .07)
  24.  
  25. class World(DirectObject):
  26.     def __init__(self):
  27.  
  28.         # Preliminary capabilities check.
  29.    
  30.         if (base.win.getGsg().getSupportsBasicShaders()==0):
  31.             self.t=addTitle("Shadow Demo: Video driver reports that shaders are not supported.")
  32.             return
  33.         if (base.win.getGsg().getSupportsDepthTexture()==0):
  34.             self.t=addTitle("Shadow Demo: Video driver reports that depth textures are not supported.")
  35.             return
  36.    
  37.         self.inst_p = addInstructions(0.95, 'P : stop/start the Panda Rotation')
  38.         self.inst_w = addInstructions(0.90, 'W : stop/start the Walk Cycle')
  39.         self.inst_t = addInstructions(0.85, 'T : stop/start the Teapot')
  40.         self.inst_l = addInstructions(0.80, 'L : move light source far or close')
  41.         self.inst_v = addInstructions(0.75, 'V: View the Depth-Texture results')
  42.         self.inst_x = addInstructions(0.70, 'Left/Right Arrow : switch camera angles')
  43.         self.inst_a = addInstructions(0.65, 'Something about A/Z and push bias')
  44.    
  45.         base.setBackgroundColor(0,0,0.2,1)
  46.    
  47.         base.camLens.setNearFar(0.5, 400)
  48.         base.camLens.setFov(75)
  49.         #base.disableMouse()
  50.  
  51.         # Load the scene.
  52.    
  53.         floorTex=loader.loadTexture('maps/envir-ground.jpg')
  54.         cm=CardMaker('')
  55.         cm.setFrame(-2,2,-2,2)
  56.         floor = render.attachNewNode(PandaNode("floor"))
  57.         for y in range(12):
  58.             for x in range(12):
  59.                 nn = floor.attachNewNode(cm.generate())
  60.                 nn.setP(-90)
  61.                 nn.setPos((x-6)*4, (y-6)*4, 0)
  62.         floor.setTexture(floorTex)
  63.         floor.flattenStrong()
  64.  
  65.         dlight = DirectionalLight("dlight")
  66.         dlightNode = render.attachNewNode(dlight)
  67.         dlightNode.setHpr(30, 50, 0)
  68.         dlight.setColor(VBase4(0.9, 0.9, 0.9, 1.4))
  69.         render.setLight(dlightNode)
  70.  
  71.         alight = AmbientLight("alight")
  72.         alightNode = render.attachNewNode(alight)
  73.         render.setLight(alightNode)
  74.    
  75.         self.pandaAxis = render.attachNewNode('panda axis')
  76.         self.pandaModel = Actor.Actor('panda-model',{'walk':'panda-walk4'})
  77.         self.pandaModel.reparentTo(self.pandaAxis)
  78.         self.pandaModel.setPos(9,0,0)
  79.         self.pandaModel.setScale(0.01, 0.01, 0.01)
  80.         self.pandaModel.setShaderInput("scale",0.01,0.01,0.01,0.01)
  81.         self.pandaWalk = self.pandaModel.actorInterval('walk',playRate=1.8)
  82.         self.pandaWalk.loop()
  83.         self.pandaMovement = self.pandaAxis.hprInterval(20.0,Point3(-360,0,0),startHpr=Point3(0,0,0))
  84.         self.pandaMovement.loop()
  85.    
  86.         self.teapot = loader.loadModel('src/data/avatar.egg')
  87.         self.teapot.reparentTo(render)
  88.         self.teapot.setPos(0,-20,10)
  89.         self.teapotMovement = self.teapot.hprInterval(50,Point3(0,360,360))
  90.         self.teapotMovement.loop()
  91.  
  92.         brick1 = loader.loadModel('src/data/brick-flat.egg')
  93.         brick1.reparentTo(render)
  94.         brick1.setPos(10, -20, 5)
  95.         brick1.setColor(0.2, 0.1, 0.5)
  96.  
  97.         brick1 = loader.loadModel('src/data/brick-flat.egg')
  98.         brick1.reparentTo(render)
  99.         brick1.setPos(10, -20, 7)
  100.         brick1.setColor(0.3, 0.4, 0.1)
  101.         brick1.setScale(0.5, 0.5, 1)
  102.  
  103.         self.accept('escape',sys.exit)
  104.    
  105.         self.accept("arrow_left", self.incrementCameraPosition, [-1])
  106.         self.accept("arrow_right", self.incrementCameraPosition, [1])
  107.         self.accept("p", self.toggleInterval, [self.pandaMovement])
  108.         self.accept("P", self.toggleInterval, [self.pandaMovement])
  109.         self.accept("t", self.toggleInterval, [self.teapotMovement])
  110.         self.accept("T", self.toggleInterval, [self.teapotMovement])
  111.         self.accept("w", self.toggleInterval, [self.pandaWalk])
  112.         self.accept("W", self.toggleInterval, [self.pandaWalk])
  113.         self.accept("v", base.bufferViewer.toggleEnable)
  114.         self.accept("V", base.bufferViewer.toggleEnable)
  115.         self.accept("o", base.oobe)
  116.  
  117.         depthnormalBuffer = base.win.makeTextureBuffer("depth-and-normal-buffer", 512, 512)
  118.         depthnormalCamera = base.makeCamera(depthnormalBuffer, lens=base.cam.node().getLens())
  119.         depthnormalCamera.node().setScene(render)
  120.         tempnode = NodePath(PandaNode("temp node"))
  121.         tempnode.setShader(loader.loadShader("synth-depthandnormals.cg"))
  122.         depthnormalCamera.node().setInitialState(tempnode.getState())
  123.  
  124.         random_normals = loader.loadTexture("noise.png")
  125.  
  126.         cm = CardMaker("filter-stage-quad")
  127.         cm.setFrameFullscreenQuad()
  128.         cm.setColor(0, 0, 0, 0)
  129.         quad = NodePath(cm.generate())
  130.         quad.setDepthTest(0)
  131.         quad.setDepthWrite(0)
  132.         quad.setTransparency(TransparencyAttrib.MAlpha)
  133.         quad.setShader(Shader.load('ssao-singlebuffer.cg'))
  134.         quad.setShaderInput('buffer', depthnormalBuffer.getTexture())
  135.         quad.setShaderInput('random', random_normals)
  136.  
  137.         aoBuffer=base.win.makeTextureBuffer("aoBuffer", 256, 256)
  138.         self.aoBuffer=aoBuffer
  139.  
  140.         quadcamnode = Camera("filter-quad-cam")
  141.         lens = OrthographicLens()
  142.         lens.setFilmSize(2, 2)
  143.         lens.setFilmOffset(0, 0)
  144.         lens.setNearFar(-1000, 1000)
  145.         quadcamnode.setLens(lens)
  146.         quadcam = quad.attachNewNode(quadcamnode)
  147.  
  148.         aoBuffer.getDisplayRegion(0).setCamera(quadcam)
  149.         aoBuffer.getDisplayRegion(0).setActive(1)
  150.  
  151.         ssao_renderer = NodePath(cm.generate())
  152.         ssao_renderer.setColor(1, 1, 1, 0)
  153.         ssao_renderer.setDepthTest(0)
  154.         ssao_renderer.setDepthWrite(0)
  155.         ssao_renderer.reparentTo(render2d)
  156.         ssao_renderer.setTransparency(TransparencyAttrib.MAlpha)
  157.         Zssao_renderer.setShader(Shader.load('ssao-render.cg'))
  158.         ssao_renderer.setShaderInput('ssaotex', aoBuffer.getTexture())
  159.  
  160.         filter_manager = CommonFilters(aoBuffer, quadcam)
  161.         filter_manager.setBlurSharpen(0.05)
  162.  
  163.    
  164. # end of __init__
  165.  
  166.     def toggleInterval(self, ival):
  167.         if (ival.isPlaying()):
  168.             ival.pause()
  169.         else:
  170.             ival.resume()
  171.  
  172.     def incrementCameraPosition(self,n):
  173.         self.cameraSelection = (self.cameraSelection + n) % 6
  174.         if (self.cameraSelection == 0):
  175.             base.cam.reparentTo(render)
  176.             base.cam.setPos(30,-45,26)
  177.             base.cam.lookAt(0,0,0)
  178.         if (self.cameraSelection == 1):
  179.             base.cam.reparentTo(self.pandaModel)
  180.             base.cam.setPos(7,-3,9)
  181.             base.cam.lookAt(0,0,0)
  182.         if (self.cameraSelection == 2):
  183.             base.cam.reparentTo(self.pandaModel)
  184.             base.cam.setPos(-7,-3,9)
  185.             base.cam.lookAt(0,0,0)
  186.         if (self.cameraSelection == 3):
  187.             base.cam.reparentTo(render)
  188.             base.cam.setPos(7,-23,12)
  189.             base.cam.lookAt(self.teapot)
  190.         if (self.cameraSelection == 4):
  191.             base.cam.reparentTo(render)
  192.             base.cam.setPos(-7,-23,12)
  193.             base.cam.lookAt(self.teapot)
  194.         if (self.cameraSelection == 5):
  195.             base.cam.reparentTo(render)
  196.             base.cam.setPos(1000,0,195)
  197.             base.cam.lookAt(0,0,0)
  198.  
  199.     def incrementLightPosition(self,n):
  200.         self.lightSelection = (self.lightSelection + n) % 2
  201.         if (self.lightSelection == 0):
  202.             self.LCam.setPos(0,-40,25)
  203.             self.LCam.lookAt(0,-10,0)
  204.             self.LCam.node().getLens().setNearFar(10,100)
  205.         if (self.lightSelection == 1):
  206.             self.LCam.setPos(0,-600,200)
  207.             self.LCam.lookAt(0,-10,0)
  208.             self.LCam.node().getLens().setNearFar(10,1000)
  209.  
  210.     def shaderSupported(self):
  211.         return base.win.getGsg().getSupportsBasicShaders()
  212.  
  213.     def adjustPushBias(self,inc):
  214.         self.pushBias *= inc
  215.         self.inst_a.setText('A/Z: Increase/Decrease the Push-Bias [%F]' % self.pushBias)
  216.         render.setShaderInput('push',self.pushBias,self.pushBias,self.pushBias,0)
  217.  
  218.  
  219. World()
  220. run()
  221.  
  222.  
Advertisement
Add Comment
Please, Sign In to add comment