def SelectionEngineInit(cls): # Create a cull bin for nodes we don't want to render. This will # be the default cull bin for the silhouette buffers; SelectableNodes # override it and jump in to the opaque cull bin. cbm = CullBinManager.getGlobalPtr() cbm.addBin('inactive', CullBinEnums.BTUnsorted, 0) cbm.setBinActive('inactive', False) return cls
def initialize(self): gsg = self.win.getGsg() # Let's print out the Graphics information. self.notify.info('Graphics Information:\n\tVendor: {0}\n\tRenderer: {1}\n\tVersion: {2}\n\tSupports Cube Maps: {3}\n\tSupports 3D Textures: {4}\n\tSupports Compute Shaders: {5}' .format(gsg.getDriverVendor(), gsg.getDriverRenderer(), gsg.getDriverVersion(), str(gsg.getSupportsCubeMap()), str(gsg.getSupports3dTexture()), str(gsg.getSupportsComputeShaders()))) # Enable shader generation on all of the main scenes if gsg.getSupportsBasicShaders() and gsg.getSupportsGlsl(): render.setShaderAuto() render2d.setShaderAuto() render2dp.setShaderAuto() else: # I don't know how this could be possible self.notify.error("GLSL shaders unsupported by graphics driver.") return # FIXME: is this still needed? # Let's disable fog on Intel graphics if gsg.getDriverVendor() == "Intel": metadata.NO_FOG = 1 self.notify.info('Applied Intel-specific graphical fix.') self.camNode.setCameraMask(CIGlobals.MainCameraBitmask) render.show(CIGlobals.ShadowCameraBitmask) cbm = CullBinManager.getGlobalPtr() cbm.addBin('ground', CullBinManager.BTUnsorted, 18) # The portal uses the shadow bin by default, # but we still want to see it with real shadows. cbm.addBin('portal', CullBinManager.BTBackToFront, 19) if not metadata.USE_REAL_SHADOWS: cbm.addBin('shadow', CullBinManager.BTBackToFront, 19) else: cbm.addBin('shadow', CullBinManager.BTFixed, -100) cbm.addBin('gui-popup', CullBinManager.BTUnsorted, 60) cbm.addBin('gsg-popup', CullBinManager.BTFixed, 70) self.setBackgroundColor(CIGlobals.DefaultBackgroundColor) self.disableMouse() self.enableParticles()
def createWorld(self, task=None): self.sky.clearAttrib(TransparencyAttrib) self.deskNP.reparentTo(self.base.render) self.deskNP.setScale(7.5) self.deskNP.setPos(0, -5, -6.5) # make a box that clips content under the desk (e.g. the paper) bb = self.deskNP.getTightBounds() sz = (bb[1]-bb[0]) * 0.8 self.underDeskClip = self.base.loader.loadModel('box') self.underDeskClip.setScale(sz) self.underDeskClip.reparentTo(self.base.render) self.underDeskClip.setPos(-sz.x/2, -sz.y*1.1, -sz.z*0.73) if False: # --> nope, this actually hides everything the camera might see self.newBin = CullBinManager.getGlobalPtr().addBin('foo', CullBinManager.BT_state_sorted, -50) # make the box obscure geometry "inside" it self.underDeskClip.setAttrib(ColorWriteAttrib.make(False)) self.underDeskClip.setDepthWrite(True) self.underDeskClip.setBin('foo', -50) else: bb = self.underDeskClip.getTightBounds() self.underDeskClip.removeNode() self.typewriterNP.reparentTo(self.base.render) self.typewriterNP.setHpr(0, 0, 0) self.typewriterNP.setScale(5) self.base.camera.setPos(0, -25, 5) self.cameraTarget = Point3(0, -9.5, 7.5) #self.cameraTarget = Point3(0, -25, 2.5) self.cameraHprTarget = Point3(0, -19.5, 0) self.typewriterTarget = Point3(0, -2.5, 2.666) self.typewriterStart = Point3(0, -5, 10) if not self.skipIntro: self.animateArrival() else: self.activateTypewriter()
def createWorld(self, task=None): self.sky.clearAttrib(TransparencyAttrib) self.deskNP.reparentTo(self.base.render) self.deskNP.setScale(7.5) self.deskNP.setPos(0, -5, -6.5) # make a box that clips content under the desk (e.g. the paper) bb = self.deskNP.getTightBounds() sz = (bb[1] - bb[0]) * 0.8 self.underDeskClip = self.base.loader.loadModel('box') self.underDeskClip.setScale(sz) self.underDeskClip.reparentTo(self.base.render) self.underDeskClip.setPos(-sz.x / 2, -sz.y * 1.1, -sz.z * 0.73) if False: # --> nope, this actually hides everything the camera might see self.newBin = CullBinManager.getGlobalPtr().addBin( 'foo', CullBinManager.BT_state_sorted, -50) # make the box obscure geometry "inside" it self.underDeskClip.setAttrib(ColorWriteAttrib.make(False)) self.underDeskClip.setDepthWrite(True) self.underDeskClip.setBin('foo', -50) else: bb = self.underDeskClip.getTightBounds() self.underDeskClip.removeNode() self.typewriterNP.reparentTo(self.base.render) self.typewriterNP.setHpr(0, 0, 0) self.typewriterNP.setScale(5) self.base.camera.setPos(0, -25, 5) self.cameraTarget = Point3(0, -9.5, 7.5) #self.cameraTarget = Point3(0, -25, 2.5) self.cameraHprTarget = Point3(0, -19.5, 0) self.typewriterTarget = Point3(0, -2.5, 2.666) self.typewriterStart = Point3(0, -5, 10) if not self.skipIntro: self.animateArrival() else: self.activateTypewriter()
def __init__(self): self.bspLoader = Py_CL_BSPLoader() self.bspLoader.setGlobalPtr(self.bspLoader) if metadata.USE_RENDER_PIPELINE: from rpcore import RenderPipeline self.pipeline = RenderPipeline() self.pipeline.create(self) else: ShowBase.__init__(self) self.loader.destroy() self.loader = CogInvasionLoader(self) __builtin__.loader = self.loader self.graphicsEngine.setDefaultLoader(self.loader.loader) self.cam.node().getDisplayRegion(0).setClearDepthActive(1) from panda3d.core import RenderAttribRegistry from panda3d.core import ShaderAttrib, TransparencyAttrib from libpandabsp import BSPMaterialAttrib attribRegistry = RenderAttribRegistry.getGlobalPtr() attribRegistry.setSlotSort(BSPMaterialAttrib.getClassSlot(), 0) attribRegistry.setSlotSort(ShaderAttrib.getClassSlot(), 1) attribRegistry.setSlotSort(TransparencyAttrib.getClassSlot(), 2) gsg = self.win.getGsg() # Let's print out the Graphics information. self.notify.info( 'Graphics Information:\n\tVendor: {0}\n\tRenderer: {1}\n\tVersion: {2}\n\tSupports Cube Maps: {3}\n\tSupports 3D Textures: {4}\n\tSupports Compute Shaders: {5}' .format(gsg.getDriverVendor(), gsg.getDriverRenderer(), gsg.getDriverVersion(), str(gsg.getSupportsCubeMap()), str(gsg.getSupports3dTexture()), str(gsg.getSupportsComputeShaders()))) # Enable shader generation on all of the main scenes if gsg.getSupportsBasicShaders() and gsg.getSupportsGlsl(): render.setShaderAuto() render2d.setShaderAuto() render2dp.setShaderAuto() else: # I don't know how this could be possible self.notify.error("GLSL shaders unsupported by graphics driver.") return # Let's disable fog on Intel graphics if gsg.getDriverVendor() == "Intel": metadata.NO_FOG = 1 self.notify.info('Applied Intel-specific graphical fix.') self.win.disableClears() self.camNode.setCameraMask(CIGlobals.MainCameraBitmask) from direct.distributed.ClockDelta import globalClockDelta __builtin__.globalClockDelta = globalClockDelta # Any ComputeNodes should be parented to this node, not render. # We isolate ComputeNodes to avoid traversing the same ComputeNodes # when doing multi-pass rendering. self.computeRoot = NodePath('computeRoot') self.computeCam = self.makeCamera(base.win) self.computeCam.node().setCullBounds(OmniBoundingVolume()) self.computeCam.node().setFinal(True) self.computeCam.reparentTo(self.computeRoot) # Initialized in initStuff() self.shaderGenerator = None render.hide() self.camLens.setNearFar(0.5, 10000) self.physicsWorld = BulletWorld() # Panda units are in feet, so the gravity is 32 feet per second, # not 9.8 meters per second. self.physicsWorld.setGravity(Vec3(0, 0, -32.1740)) self.physicsWorld.setGroupCollisionFlag(7, 1, True) self.physicsWorld.setGroupCollisionFlag(7, 2, True) self.physicsWorld.setGroupCollisionFlag(7, 3, False) self.physicsWorld.setGroupCollisionFlag(7, 4, False) self.physicsWorld.setGroupCollisionFlag(7, 8, True) self.taskMgr.add(self.__physicsUpdate, "physicsUpdate", sort=30) debugNode = BulletDebugNode('Debug') self.debugNP = render.attachNewNode(debugNode) self.physicsWorld.setDebugNode(self.debugNP.node()) self.physicsDbgFlag = False self.setPhysicsDebug(self.config.GetBool('physics-debug', False)) #self.shadowCaster = ShadowCaster(Vec3(163, -67, 0)) #self.shadowCaster.enable() self.bspLoader.setGamma(2.2) self.bspLoader.setWin(self.win) self.bspLoader.setCamera(self.camera) self.bspLoader.setRender(self.render) self.bspLoader.setMaterialsFile("phase_14/etc/materials.txt") #self.bspLoader.setTextureContentsFile("phase_14/etc/texturecontents.txt") self.bspLoader.setWantVisibility(True) self.bspLoader.setVisualizeLeafs(False) self.bspLoader.setWantLightmaps(True) #self.bspLoader.setShadowCamPos(Point3(-15, 5, 40)) #self.bspLoader.setShadowResolution(60 * 2, 1024 * 1) self.bspLoader.setPhysicsWorld(self.physicsWorld) self.bspLevel = None self.materialData = {} self.skyBox = None self.skyBoxUtil = None #self.nmMgr = RNNavMeshManager.get_global_ptr() #self.nmMgr.set_root_node_path(self.render) #self.nmMgr.get_reference_node_path().reparentTo(self.render) #self.nmMgr.start_default_update() #self.nmMgr.get_reference_node_path_debug().reparentTo(self.render) self.navMeshNp = None # Setup 3d audio run before igLoop so 3d positioning doesn't lag behind base.audio3d = Audio3DManager(base.sfxManagerList[0], camera, render) base.audio3d.setDropOffFactor(0.15) base.audio3d.setDopplerFactor(0.15) # Setup collision handlers base.cTrav = CollisionTraverser() base.lifter = CollisionHandlerFloor() base.pusher = CollisionHandlerPusher() base.queue = CollisionHandlerQueue() base.lightingCfg = None self.cl_attackMgr = None #self.accept('/', self.projectShadows) # Let's setup the user input storage system uis = UserInputStorage() self.inputStore = uis self.userInputStorage = uis __builtin__.inputStore = uis __builtin__.userInputStorage = uis self.credits2d = self.render2d.attachNewNode(PGTop("credits2d")) self.credits2d.setScale(1.0 / self.getAspectRatio(), 1.0, 1.0) self.wakeWaterHeight = -30.0 self.bloomToggle = False self.hdrToggle = False self.fxaaToggle = CIGlobals.getSettingsMgr().getSetting( "aa").getValue() == "FXAA" self.aoToggle = False self.music = None self.currSongName = None render.show(CIGlobals.ShadowCameraBitmask) self.avatars = [] wrm = WaterReflectionManager() self.waterReflectionMgr = wrm __builtin__.waterReflectionMgr = wrm # Let's setup our margins base.marginManager = MarginManager() base.margins = aspect2d.attachNewNode( base.marginManager, DirectGuiGlobals.MIDGROUND_SORT_INDEX + 1) base.leftCells = [ base.marginManager.addCell(0.1, -0.6, base.a2dTopLeft), base.marginManager.addCell(0.1, -1.0, base.a2dTopLeft), base.marginManager.addCell(0.1, -1.4, base.a2dTopLeft) ] base.bottomCells = [ base.marginManager.addCell(0.4, 0.1, base.a2dBottomCenter), base.marginManager.addCell(-0.4, 0.1, base.a2dBottomCenter), base.marginManager.addCell(-1.0, 0.1, base.a2dBottomCenter), base.marginManager.addCell(1.0, 0.1, base.a2dBottomCenter) ] base.rightCells = [ base.marginManager.addCell(-0.1, -0.6, base.a2dTopRight), base.marginManager.addCell(-0.1, -1.0, base.a2dTopRight), base.marginManager.addCell(-0.1, -1.4, base.a2dTopRight) ] base.mouseWatcherNode.setEnterPattern('mouse-enter-%r') base.mouseWatcherNode.setLeavePattern('mouse-leave-%r') base.mouseWatcherNode.setButtonDownPattern('button-down-%r') base.mouseWatcherNode.setButtonUpPattern('button-up-%r') cbm = CullBinManager.getGlobalPtr() cbm.addBin('ground', CullBinManager.BTUnsorted, 18) # The portal uses the shadow bin by default, # but we still want to see it with real shadows. cbm.addBin('portal', CullBinManager.BTBackToFront, 19) if not metadata.USE_REAL_SHADOWS: cbm.addBin('shadow', CullBinManager.BTBackToFront, 19) else: cbm.addBin('shadow', CullBinManager.BTFixed, -100) cbm.addBin('gui-popup', CullBinManager.BTUnsorted, 60) cbm.addBin('gsg-popup', CullBinManager.BTFixed, 70) self.setBackgroundColor(CIGlobals.DefaultBackgroundColor) self.disableMouse() self.enableParticles() base.camLens.setNearFar(CIGlobals.DefaultCameraNear, CIGlobals.DefaultCameraFar) base.transitions = CITransitions(loader) base.transitions.IrisModelName = "phase_3/models/misc/iris.bam" base.transitions.FadeModelName = "phase_3/models/misc/fade.bam" self.accept(self.inputStore.TakeScreenshot, ScreenshotHandler.takeScreenshot) #self.accept('u', render.setShaderOff) #self.accept('i', render.setShaderOff, [1]) #self.accept('o', render.setShaderOff, [2]) # Disabled oobe culling #self.accept('o', self.oobeCull) #self.accept('c', self.reportCam) self.taskMgr.add(self.__updateShadersAndPostProcess, 'CIBase.updateShadersAndPostProcess', 47) self.taskMgr.add(self.__update3DAudio, 'CIBase.update3DAudio', 59)
This is so you can use client objects in a stand-alone program easily. """ from direct.distributed.ClientRepository import ClientRepository from panda3d.core import CollisionTraverser, AntialiasAttrib, loadPrcFile, loadPrcFileData from panda3d.core import CullBinManager import __builtin__ loadPrcFile('config/config_client.prc') loadPrcFileData('', 'framebuffer-multisample 0') loadPrcFileData('', 'multisamples 16') loadPrcFileData('', 'tk-main-loop 0') loadPrcFileData('', 'egg-load-old-curves 0') cbm = CullBinManager.getGlobalPtr() cbm.addBin('ground', CullBinManager.BTUnsorted, 18) cbm.addBin('shadow', CullBinManager.BTBackToFront, 19) cbm.addBin('gui-popup', CullBinManager.BTUnsorted, 60) from direct.showbase.ShowBase import ShowBase base = ShowBase() from direct.showbase.Audio3DManager import Audio3DManager base.audio3d = Audio3DManager(base.sfxManagerList[0], camera) base.audio3d.setDistanceFactor(25) base.audio3d.setDropOffFactor(0.025) from lib.coginvasion.nametag import NametagGlobals from direct.gui import DirectGuiGlobals
# Make polys for the cylinder. cyl = GeomTristrips(Geom.UHStatic) for i in xrange(circRes): cyl.addVertex(i + circRes) cyl.addVertex(i) cyl.addVertex(circRes) cyl.addVertex(0) cyl.closePrimitive() geom.addPrimitive(cyl) node = GeomNode('geomnode') node.addGeom(geom) return node cbm = CullBinManager.getGlobalPtr() cbm.addBin('handles', CullBinEnums.BTFrontToBack, 35) cbm.setBinActive('handles', True) tempnode = NodePath(PandaNode('temp node')) tempnode.setShaderAuto() tempnode.setShaderInput('hi_id', Vec4(0, 0, 0, 0), 2) tempnode.setBin('inactive', 0, 50) tempnode.setAntialias(AntialiasAttrib.MNone, 10) newCamera = base.makeCamera(base.win, lens=base.cam.node().getLens()) newCamera.node().setInitialState(tempnode.getState()) newCamera.node().getDisplayRegion(0).setSort(1) newCamera.node().getDisplayRegion(0).setClearDepthActive(1) newCamera.node().setCameraMask(BitMask32(4)) newCamera.node().setScene(render)