Example #1
0
    def buildSubType(self):
        """Build the light with the given subType"""

        if self.subType == "pointType":
            # make a point light
            c = self.color
            pointLight = PointLight(self.name)
            pointLight.setColor(VBase4(c[0], c[1], c[2], c[3]))
            pointLight.setShadowCaster(True, 512, 512)
            plnp = self.renderObjectsLight.attachNewNode(pointLight)
            plnp.setPos(self.position)
            self.lightNP = plnp
            self.setLightSwitch(True)

        if self.subType == "directType":
            # make a directional light
            c = self.color
            directLight = DirectionalLight(self.name)
            directLight.setColor(VBase4(c[0], c[1], c[2], c[3]))
            directLight.setShadowCaster(True, 512, 512)
            dlnp = self.renderObjectsLight.attachNewNode(directLight)
            #dlnp.setHpr(0, -60, 0) # no idea why its like that.. but it works
            self.lightNP = dlnp
            self.setLightSwitch(True)


        if self.subType == "ambientType":
            # make a ambient light
            c = self.color
            ambientLight = AmbientLight(self.name)
            ambientLight.setColor(VBase4(c[0], c[1],c[2], c[3]))
            alnp = self.renderObjectsLight.attachNewNode(ambientLight)
            self.lightNP = alnp
            self.setLightSwitch(True)

        if self.subType == "spotType":
            # make a spot light
            # lookAtObj = _object.getTag("lookAt") get rid of this.
            c = self.color
            spotLight = Spotlight(self.name)
            spotLight.setColor(VBase4(c[0], c[1], c[2], c[3]))
            spotLight.setShadowCaster(True, 512, 512)
            lens = PerspectiveLens()
            spotLight.setLens(lens)
            slnp = self.renderObjectsLight.attachNewNode(spotLight)
            slnp.setPos(self.position)
            slnp.setHpr(self.hpr)
            # Find out if this is really the only option
            # because setHpr doesnt seem to have any effect.
            # lookAt would be okay but that means adding anothe type
            #slnp.lookAt(self.main.GameObjects["player"].collisionBody)
            self.lightNP = slnp
            self.setLightSwitch(True)
Example #2
0
    def __init__(self):
        super().__init__()
        self.set_background_color(0, 0, 0, 1)
        self.cam.setPos(0, -12, 0)

        self.trees = NodePath("trees")

        self.tree1 = self.loader.loadModel('my-models/christmas_tree')
        self.tree1.setPos(0, 0, -2.5)
        self.tree1.reparentTo(self.trees)

        self.tree2 = self.loader.loadModel('my-models/christmas_tree')
        self.tree2.setPos(4, 5, -2.5)
        self.tree2.reparentTo(self.trees)

        self.tree3 = self.loader.loadModel('my-models/christmas_tree')
        self.tree3.setPos(-4, 7, -2.5)
        self.tree3.reparentTo(self.trees)

        self.trees.reparentTo(self.render)

        self.floor = self.loader.loadModel('my-models/floor')
        self.floor.setPos(0, 0, -2.5)
        self.floor.reparentTo(self.render)

        self.light_model = self.loader.loadModel('models/misc/sphere')
        self.light_model.setScale(0.2, 0.2, 0.2)
        # self.light_model.setPos(4, -4, 0)
        self.light_model.reparentTo(self.render)

        plight = PointLight("plight")
        plight.setShadowCaster(True, 1024, 1024)
        self.render.setShaderAuto()
        plnp = self.light_model.attachNewNode(plight)
        # plight.setAttenuation((1, 0, 0)) # constant, linear, and quadratic.
        self.trees.setLight(plnp)

        alight = AmbientLight("alight")
        alight.setColor((0.04, 0.04, 0.04, 1))
        alnp = self.render.attachNewNode(alight)
        self.trees.setLight(alnp)

        self.floor.setLight(plnp)
        self.floor.setLight(alnp)

        filters = CommonFilters(self.win, self.cam)
        filters.setBloom(size="large")

        self.taskMgr.add(self.move_light, "move-light")
Example #3
0
    def __create_point_light(self,
                             lightId,
                             lightColor,
                             lightPos,
                             shadow = True):

        pointLight = PointLight(lightId)
        pointLight.setColor(lightColor)
        pointLight.setShadowCaster(shadow)

        pointLightNP = NodePath(pointLight)

        pointLightNP.setPos(lightPos)

        return pointLightNP
Example #4
0
    def _addDefaultLighting(self):
        alight = AmbientLight('alight')
        alight.setColor(VBase4(0.2, 0.2, 0.2, 1))
        alnp = self.render.attachNewNode(alight)
        self.render.setLight(alnp)

        # NOTE: Point light following the camera
        plight = PointLight('plight')
        plight.setColor(VBase4(0.9, 0.9, 0.9, 1))
        plnp = self.cam.attachNewNode(plight)
        self.render.setLight(plnp)

        if self.shadowing:
            # Use a 512x512 resolution shadow map
            plight.setShadowCaster(True, 512, 512)

            # Enable the shader generator for the receiving nodes
            self.render.setShaderAuto()
            self.render.setAntialias(AntialiasAttrib.MAuto)
Example #5
0
    def _addDefaultLighting(self):
        alight = AmbientLight('alight')
        alight.setColor(VBase4(0.2, 0.2, 0.2, 1))
        alnp = self.scene.scene.attachNewNode(alight)
        self.scene.scene.setLight(alnp)
        
        for camera in self.cameras:
            
            #NOTE: Point light following the camera
            plight = PointLight('plight')
            plight.setColor(VBase4(1.0, 1.0, 1.0, 1))
            plnp = camera.attachNewNode(plight)
            self.scene.scene.setLight(plnp)
            
            if self.shadowing:
                # Use a 512x512 resolution shadow map
                plight.setShadowCaster(True, 512, 512)
    
                # Enable the shader generator for the receiving nodes
                self.scene.scene.setShaderAuto()
                self.scene.scene.setAntialias(AntialiasAttrib.MAuto)

        if self.modelLightsInfo is not None:
            
            # Add model-related lights (e.g. lamps)
            for model in self.scene.scene.findAllMatches('**/+ModelNode'):
                modelId = model.getNetTag('model-id')
                for lightNp in self.modelLightsInfo.getLightsForModel(modelId):
                    
                    if self.shadowing:
                        # Use a 512x512 resolution shadow map
                        lightNp.node().setShadowCaster(True, 512, 512)
                    
                    lightNp.reparentTo(model)
                    
                    self.scene.scene.setLight(lightNp)
Example #6
0
class VisualTest(ShowBase):
    def __init__(self):
        super().__init__(self)
        self.var1 = 0
        self.scene = loader.loadModel("models/world")
        playerTexture = loader.loadTexture("models/starfoxShip.jpg")
        self.player = self.scene.find("player")
        self.player.setTexture(playerTexture)

        base.setBackgroundColor(0.1, 0.1, 0.1, 1)
        enemyTexture = loader.loadTexture("models/enemyShip.jpg")
        self.enemy = self.scene.find("enemy1")
        self.enemy.setTexture(enemyTexture)

        self.basePlane = self.scene.find("basePlane")

        self.scene.reparentTo(self.render)
        self.player.setPos(50, 50, 3)
        self.enemy.setPos(50, 55, 0)

        self.ambient = AmbientLight("ambient")
        self.ambient.color = (0.1, 0.1, 0.1, 1)
        self.ambientPath = self.render.attachNewNode(self.ambient)
        render.setLight(self.ambientPath)

        self.dirLight = DirectionalLight("dir light")
        self.dirLight.color = (1, 1, 1, 1)
        self.dirLightPath = self.render.attachNewNode(self.dirLight)
        self.dirLightPath.setHpr(0, -90, 0)
        self.dirLight.setShadowCaster(True, 512, 512)
        render.setLight(self.dirLightPath)

        self.pointLight = PointLight("point light")
        self.pointLight.color = (1, 1, 1, 1)
        self.pointLightPath = self.render.attachNewNode(self.pointLight)
        self.pointLightPath.setPos(50, 52.5, 4)
        self.pointLight.attenuation = (.5, 0, 0)
        self.pointLight.setShadowCaster(True, 1024, 1024)
        self.render.setLight(self.pointLightPath)

        self.fog = Fog("fog")
        self.fog.setColor(0.1, 0.1, 0.1)
        self.fog.setExpDensity(.3)
        self.fog.setLinearRange(150, 300)
        self.fog.setLinearFallback(45, 160, 320)
        self.render.setFog(self.fog)

        self.render.setShaderAuto()
        self.render.setAntialias(AntialiasAttrib.MAuto)

        filters = CommonFilters(base.win, base.cam)
        filters.setBloom(size="large")
        filters.setAmbientOcclusion(strength=0.6, falloff=0.0005, radius=0.1)
        filters.setCartoonInk(separation=2, color=(0, 0, 0, 1))
        self.taskMgr.add(self.update, "update")

    def update(self, evt):
        self.var1 = self.var1 + 0.1
        #self.dirLight.color = (self.var1,0,1,1)
        #self.dirLightPath.setHpr(self.var1,-self.var1,0)
        self.camera.setPos(60 + self.var1, 60 + self.var1, 20)
        #self.pointLightPath.setPos(30+self.var1 ,52.5,4)
        self.camera.lookAt(self.player)

        return Task.cont
Example #7
0
    def generate(self, helperInfo):
        color = self.mapObject.getPropertyValue("_light",
                                                default=Vec4(
                                                    255, 255, 255, 255))
        color = LEGlobals.colorFromRGBScalar255(color)
        color = LEGlobals.vec3GammaToLinear(color)

        intensity = self.mapObject.getPropertyValue("_intensity", default=1.0)
        innerRadius = self.mapObject.getPropertyValue("_inner_radius",
                                                      default=1.0)
        outerRadius = self.mapObject.getPropertyValue("_outer_radius",
                                                      default=2.0)

        color[0] = color[0] * intensity
        color[1] = color[1] * intensity
        color[2] = color[2] * intensity

        constant = self.mapObject.getPropertyValue("_constant_attn",
                                                   default=0.0)
        linear = self.mapObject.getPropertyValue("_linear_attn", default=0.0)
        quadratic = self.mapObject.getPropertyValue("_quadratic_attn",
                                                    default=1.0)

        depthBias = self.mapObject.getPropertyValue("_depth_bias")
        shadowSize = self.mapObject.getPropertyValue("_shadow_map_size")
        shadowCaster = self.mapObject.getPropertyValue("_shadow_caster")
        softnessFactor = self.mapObject.getPropertyValue("_softness_factor")
        normalOffsetScale = self.mapObject.getPropertyValue(
            "_normal_offset_scale")
        normalOffsetUvSpace = self.mapObject.getPropertyValue(
            "_normal_offset_uv_space")

        pl = PointLight("lightHelper-light")
        pl.setColor(Vec4(color[0], color[1], color[2], 1.0))
        pl.setFalloff(quadratic)
        pl.setInnerRadius(innerRadius)
        pl.setOuterRadius(outerRadius)
        if shadowCaster:
            pl.setCameraMask(DirectRender.ShadowCameraBitmask)
            pl.setShadowCaster(True, shadowSize, shadowSize)
            pl.setDepthBias(depthBias)
            pl.setSoftnessFactor(softnessFactor)
            pl.setNormalOffsetScale(normalOffsetScale)
            pl.setNormalOffsetUvSpace(normalOffsetUvSpace)
        self.light = self.mapObject.helperRoot.attachNewNode(pl)
        if True:  #self.mapObject.doc.numlights < 128:
            self.mapObject.doc.render.setLight(self.light)
            self.mapObject.doc.numlights += 1
            self.hasLight = True

        innerSphere = getUnitCircle().copyTo(self.light)
        innerSphere.setScale(innerRadius)
        innerSphere.setColorScale(InnerColor)
        outerSphere = getUnitCircle().copyTo(self.light)
        outerSphere.setScale(outerRadius)
        outerSphere.setColorScale(OuterColor)

        self.innerSphere = innerSphere
        self.outerSphere = outerSphere

        if not self.mapObject.selected:
            innerSphere.stash()
            outerSphere.stash()
class VisualTest(ShowBase):
    def __init__(self):
        super().__init__(self)

        self.scene = loader.loadModel("models/world")
        self.player = self.scene.find("player")
        self.basePlane = self.scene.find("basePlane")
        self.player.reparentTo(self.render)
        self.basePlane.reparentTo(self.render)

        self.scene.remove_node()
        self.taskMgr.add(self.update, "update")

        self.camera.setPos(self.render, 0, -100, 70)
        base.setBackgroundColor(0.1, 0.1, 0.1, 1)

        self.dirLight = DirectionalLight("dir light")
        self.dirLight.setShadowCaster(True, 512, 512)
        self.dirLight.color = (1, 0, 1, 1)
        self.dirLightPath = self.render.attachNewNode(self.dirLight)
        self.dirLightPath.setHpr(45, -60, 0)
        render.setLight(self.dirLightPath)
        self.angleTime = 0.0
        self.totalAngleTime = 10.0
        self.hAngle = 0

        self.ambientLight = AmbientLight("ambient")
        self.ambientLight.color = (0.1, 0.1, 0.1, 1)
        self.ambLightPath = self.render.attachNewNode(self.ambientLight)
        render.setLight(self.ambLightPath)

        self.pointLight = PointLight("point")
        self.pointLight.color = (1, 1, 1, 1)
        self.pointLightPath = self.render.attachNewNode(self.pointLight)
        self.pointLightPath.setPos(0, 5, 5)
        self.pointLight.setShadowCaster(True, 512, 512)
        self.render.setLight(self.pointLightPath)

        self.fog = Fog("fog")
        self.fog.setColor(.1, .1, .1)
        self.fog.setExpDensity(.3)
        self.fog.setLinearRange(150, 200)
        self.fog.setLinearFallback(45, 160, 320)
        render.setFog(self.fog)
        self.render.setShaderAuto()

        self.p = self.render.attachNewNode("particles")
        base.enableParticles()
        p = ParticleEffect()
        p.loadConfig('./mysmoke.ptf')
        p.start(parent=self.p, renderParent=render)
        self.p.setPos(self.player, 0, 0, 2)

        self.font = loader.loadFont('./fonts/Magenta.ttf')
        self.sceneName = DirectLabel(text="Starfox visual test",
                                     parent=self.aspect2d,
                                     scale=0.07,
                                     pos=(-1.2, 0, 0.85),
                                     text_font=self.font,
                                     relief=None,
                                     text_fg=(1, 1, 1, 1),
                                     textMayChange=True,
                                     text_align=TextNode.ALeft)

        self.foxy = OnscreenImage(image='./UI/fox-icon-png-8.png',
                                  pos=(1.2, 9, 0.85),
                                  scale=0.1)
        self.foxy.setTransparency(True)

        self.controlsPanel = DirectDialog(frameSize=(-1.1, 1.1, -0.9, -0.7),
                                          relief=DGG.FLAT)

        btn = DirectButton(text="Rotate",
                           command=self.doRotate,
                           image='./UI/fox-icon-png-8.png',
                           pos=(-0.9, 0, -0.8),
                           parent=self.controlsPanel,
                           scale=0.07,
                           relief=None)

        btn2 = DirectButton(text="Anin Light",
                            command=self.doLight,
                            image='./UI/fox-icon-png-8.png',
                            pos=(-0.7, 0, -0.8),
                            parent=self.controlsPanel,
                            scale=0.07,
                            relief=None)

        self.camera.lookAt(self.player)
        self.makeRotation = False
        self.rotateAngles = 0
        self.animLight = False

        filter = CommonFilters(base.win, base.cam)
        filter.setBloom(size="large", intensity=2)
        #filter.setAmbientOcclusion(strength = 5,  radius = 3)
        filter.setCartoonInk(separation=4)

    def doRotate(self):
        self.makeRotation = True
        return 0

    def doLight(self):
        self.animLight = True
        return 0

    def update(self, evt):
        ang = (self.angleTime / self.totalAngleTime)
        #self.camera.setPos(self.player, ang*100,ang*100,ang*100)

        self.player.setPos(self.render, 0, 0, 1)
        #self.camera.lookAt( Vec3(0,300,0) )

        #self.p.setPos(self.player, 0,0,0,)
        # self.dirLightPath.setHpr(ang*360.0 ,-60,0)
        if (self.makeRotation):
            self.makeRotation = False
            self.rotateAngles = (self.rotateAngles + 90) % 360
            self.player.setHpr(self.rotateAngles, 0, 0)
            self.sceneName[
                "text"] = f"Starfox visual test ({self.rotateAngles})"

        self.camera.setPos(self.render, 10, 10, 10)
        self.camera.lookAt(self.player)

        if (ang >= 1):
            self.angleTime = 0
        self.angleTime = self.angleTime + globalClock.getDt()
        self.dirLight.color = (ang, 0, 1, 1)

        if self.animLight:
            self.pointLightPath.setPos(ang * 10 - 5, ang * 10 - 5, ang * 5)

        return Task.cont
    def __init__(self):
        ShowBase.__init__(self)
        
        gltf.patch_loader(self.loader)
        
        properties = WindowProperties()
        properties.setSize(1000, 750)
        
        
        

        self.disableMouse()
        self.environment = loader.loadModel("environment/island.gltf")
        self.environment.reparentTo(render)
        self.environment.setPos(0,0,-3) 
        self.environment.setHpr(0,-90,0)


        """ I put this becase I think there is a default light that I cant reach and manupulate.
        thets why I setLightsOff first. Otherwise Ican't create or cast shadows etc. """
        self.environment.setLightOff()

        mats = self.environment .findAllMaterials()
        mats[0].clearBaseColor()
        mats[1].clearBaseColor()
       
        mats[0].setShininess(200)
        
        mats[1].setShininess(100)
        
        """ In this block I create a textureBuffer and create camera 
        on that buffer that its display region is upper right corner of the window
        I use that region to create saveScreenShot xxxx or create a numpy array out of it
        (numpy_image_data) 
        second try is to make a screenshot directly from the buffer which is not so important
        Both works though """
        
        self.useTrackball()
        # ambientLight = AmbientLight("ambient light")
        # ambientLight.setColor(Vec4(0.2, 0.2, 0.2, 1))
        # self.ambientLightNodePath = render.attachNewNode(ambientLight)
        # render.setLight(self.ambientLightNodePath)
        # In the body of your code
        mainLight = DirectionalLight("main light")
        
        self.mainLightNodePath = render.attachNewNode(mainLight)
        # Turn it around by 45 degrees, and tilt it down by 45 degrees
        mainLight.setShadowCaster(True,1000,1000)
        self.mainLightNodePath.setHpr(45, -45, 0)
        render.setLight(self.mainLightNodePath)

        """ I put it here again"""
        self.environment.setLight(self.mainLightNodePath)

        pointLight = PointLight("point light")
        pointLight.setShadowCaster(True,1000,1000)
        self.pointLightNodePath = render.attachNewNode(pointLight)
        self.pointLightNodePath.setPos(0,0,10)
        render.setLight(self.pointLightNodePath)

        """ and again """
        self.environment.setLight(self.pointLightNodePath)

        render.setShaderAuto()

        self.tempActor2 = Actor("models/cube.bam")
        self.tempActor2.reparentTo(render)
        self.tempActor2.setPos(-2, 2, -1)
        self.tempActor2.setScale(.2)
        
        self.monkey = Actor("models/monkey")
        self.monkey.set_scale(.25)
        self.monkey.reparentTo(render)
        self.monkey.set_pos(-7,-7,2) 
        self.monkey.lookAt(self.tempActor2)  

        self.monkey2 = Actor("models/monkey")
        self.monkey2.set_scale(.25)
        self.monkey2.reparentTo(render)
        self.monkey2.set_pos(0,3,1)
        self.monkey2.lookAt(self.tempActor2)



        

        tex=Texture()
        self.mybuffer = self.win.makeTextureBuffer("My Buffer", 512, 512,tex,to_ram=True)
        self.mybuffer.setSort(-100)
        mycamera = self.makeCamera(self.mybuffer,displayRegion=(.5,1,.5,1))
        mycamera.reparentTo(self.monkey)



        tex2=Texture()
        mybuffer2 = self.win.makeTextureBuffer("My Buffer2", 512, 512,tex,to_ram=True)
        mybuffer2.setSort(-500)
        mycamera2 = self.makeCamera(mybuffer2,displayRegion=(0,.5,0,.5))
        mycamera2.reparentTo(self.monkey2)

        self.graphicsEngine.renderFrame()

        
        print(self.mybuffer.getActiveDisplayRegions())
        """shadows for cameras missing here in screenshot"""
        save_it=self.mybuffer.getActiveDisplayRegion(0).saveScreenshotDefault('1111')
        my_output=self.mybuffer.getActiveDisplayRegion(0).getScreenshot()
        numpy_image_data=np.array(my_output.getRamImageAs("RGB"), np.float32)
        """shadows for cameras missing here in screenshot"""
        save_it2=mybuffer2.getActiveDisplayRegion(0).saveScreenshotDefault('2222')
        my_output2=mybuffer2.getActiveDisplayRegion(0).getScreenshot()
        numpy_image_data2=np.array(my_output2.getRamImageAs("RGB"), np.float32)
        print(numpy_image_data)



        file_name=Filename.fromOsSpecific("save_gameDat_001.png")
        self.mybuffer.saveScreenshot(file_name)
        print('Cameras')
        print(self.camList)
        print('Number Of Display Regions')
        print(self.win.getNumDisplayRegions())
        print('Active Display Regions')
        print(self.win.getActiveDisplayRegions())

        print(self.win.getDisplayRegions())
        
        print('Number Of Display Regions')
        print(self.win.getNumDisplayRegions())


        self.keyMap = {
            "up" : False,
            "down" : False,
            "left" : False,
            "right" : False,
            "shoot" : False
        }
        self.accept("w", self.updateKeyMap, ["up", True])
        self.accept("w-up", self.updateKeyMap, ["up", False])
        self.accept("s", self.updateKeyMap, ["down", True])
        self.accept("s-up", self.updateKeyMap, ["down", False])
        self.accept("a", self.updateKeyMap, ["left", True])
        self.accept("a-up", self.updateKeyMap, ["left", False])
        self.accept("d", self.updateKeyMap, ["right", True])
        self.accept("d-up", self.updateKeyMap, ["right", False])
        self.accept("mouse1", self.updateKeyMap, ["shoot", True])
        self.accept("mouse1-up", self.updateKeyMap, ["shoot", False])

        self.updateTask = taskMgr.add(self.update, "update")