⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lightingdemo.py

📁 赫赫大名的 OGRE 游戏引擎
💻 PY
字号:
import localogre as ogre
import sampleframework

class LightingApplication(sampleframework.Application):
    def _createScene( self ):
        sceneManager = self.sceneManager
        camera = self.camera
        
        sceneManager.setAmbientLight( ogre.ColourValue(0.1, 0.1, 0.1) )
        sceneManager.setSkyBox( True, 'Examples/SpaceSkyBox' )

        entity = sceneManager.createEntity( 'head', 'ogrehead.mesh' )
        sceneManager.getRootSceneNode().attachObject( entity )

        redYellowLightsNode = sceneManager.getRootSceneNode().createChildSceneNode( ogre.Vector3.ZERO,
                                                                                    ogre.Quaternion.IDENTITY )
        redYellowLights = sceneManager.createBillboardSet( 'RedYellowLights', 20 )
        redYellowLights.setMaterialName( 'Examples/Flare' )
        redYellowLightsNode.attachObject( redYellowLights )
        self.redYellowLightsNode = redYellowLightsNode

        greenBlueLightsNode = sceneManager.getRootSceneNode().createChildSceneNode( ogre.Vector3.ZERO,
                                                                                    ogre.Quaternion.IDENTITY )
        greenBlueLights = sceneManager.createBillboardSet( 'GreenBlueLights', 20 )
        greenBlueLights.setMaterialName( 'Examples/Flare' )
        greenBlueLightsNode.attachObject( greenBlueLights )
        self.greenBlueLightsNode = greenBlueLightsNode

        # Red light billboard, in "off" state        
        redLightPosition = ogre.Vector3( 78, -8, -70 )
        redLightBoard = redYellowLights.createBillboard( redLightPosition, ogre.ColourValue.White )
        redLightBoard.setColour( ogre.ColourValue.Black )
        
        # Blue light billboard, in "off" state        
        blueLightPosition = ogre.Vector3( -90, -8, -70 )
        blueLightBoard = greenBlueLights.createBillboard( blueLightPosition, ogre.ColourValue.White )
        blueLightBoard.setColour( ogre.ColourValue.Black )
        
        # Yellow light billboard, in "off" state        
        yellowLightPosition = ogre.Vector3( -4.5, 30, -80 )
        yellowLightBoard = redYellowLights.createBillboard( yellowLightPosition, ogre.ColourValue.White )
        yellowLightBoard.setColour( ogre.ColourValue.Black )
        
        # Green light billboard, in "off" state        
        greenLightPosition = ogre.Vector3( 50, 70, 80 )
        greenLightBoard = redYellowLights.createBillboard( greenLightPosition, ogre.ColourValue.White )
        greenLightBoard.setColour( ogre.ColourValue.Black )

        # Red light, in "off" state
        redLight = sceneManager.createLight( 'RedFlyingLight' )
        redLight.setType( ogre.Light.LightTypes.LT_POINT )
        redLight.setPosition( redLightPosition )
        redLight.setDiffuseColour( ogre.ColourValue.Black )
        redYellowLightsNode.attachLight( redLight )

        # Blue light, in "off" state
        blueLight = sceneManager.createLight( 'BlueFlyingLight' )
        blueLight.setType( ogre.Light.LightTypes.LT_POINT )
        blueLight.setPosition( blueLightPosition )
        blueLight.setDiffuseColour( ogre.ColourValue.Black )
        greenBlueLightsNode.attachLight( blueLight )

        # Yellow light, in "off" state
        yellowLight = sceneManager.createLight( 'YellowFlyingLight' )
        yellowLight.setType( ogre.Light.LightTypes.LT_POINT )
        yellowLight.setPosition( yellowLightPosition )
        yellowLight.setDiffuseColour( ogre.ColourValue.Black )
        redYellowLightsNode.attachLight( yellowLight )

        # Green light, in "off" state
        greenLight = sceneManager.createLight( 'GreenFlyingLight' )
        greenLight.setType( ogre.Light.LightTypes.LT_POINT )
        greenLight.setPosition( greenLightPosition )
        greenLight.setDiffuseColour( ogre.ColourValue.Black )
        greenBlueLightsNode.attachLight( greenLight )
        
        # Light flashers
        self.redLightFlasher = LightFlasher( redLight, redLightBoard, ogre.ColourValue.Red )
        self.blueLightFlasher = LightFlasher( blueLight, blueLightBoard, ogre.ColourValue.Blue )
        self.yellowLightFlasher = LightFlasher( yellowLight, yellowLightBoard, ogre.ColourValue(1.0,1.0,0.0) )
        self.greenLightFlasher = LightFlasher( greenLight, greenLightBoard, ogre.ColourValue.Green )
        
        # Light controller functions
        redLightControllerFunc = LightFlasherControllerFunction( ogre.WaveformType.WFT_SINE, 0.5, 0.0 )
        blueLightControllerFunc = LightFlasherControllerFunction( ogre.WaveformType.WFT_SINE, 0.75, 0.5 )
        yellowLightControllerFunc = LightFlasherControllerFunction( ogre.WaveformType.WFT_SINE, 0.25, 0.0 )
        greenLightControllerFunc = LightFlasherControllerFunction( ogre.WaveformType.WFT_SINE, 0.25, 0.5 )

        # Light controllers
        controllerManager = ogre.ControllerManager.getSingleton()
        self.redLightController = controllerManager.createController( controllerManager.getFrameTimeSource(),
                                                                 self.redLightFlasher,
                                                                 redLightControllerFunc );
        self.blueLightController = controllerManager.createController( controllerManager.getFrameTimeSource(),
                                                                 self.blueLightFlasher,
                                                                 blueLightControllerFunc );
        self.yellowLightController = controllerManager.createController( controllerManager.getFrameTimeSource(),
                                                                 self.yellowLightFlasher,
                                                                 yellowLightControllerFunc );
        self.greenLightController = controllerManager.createController( controllerManager.getFrameTimeSource(),
                                                                 self.greenLightFlasher,
                                                                 greenLightControllerFunc );

    def _createFrameListener( self ):
        self.frameListener = LightingListener( self.renderWindow, self.camera,
                                               self.redYellowLightsNode, self.greenBlueLightsNode  )
        self.root.addFrameListener( self.frameListener )

class LightingListener(sampleframework.FrameListener):
    def __init__( self, renderWindow, camera, redYellowLightsNode, greenBlueLightsNode ):
        sampleframework.FrameListener.__init__( self, renderWindow, camera )
        self.redYellowLightsNode = redYellowLightsNode
        self.greenBlueLightsNode = greenBlueLightsNode

    def frameStarted( self, frameEvent ):
        self.redYellowLightsNode.yaw( frameEvent.timeSinceLastFrame * 10.0, ogre.Node.TransformSpace.TS_LOCAL )
        self.greenBlueLightsNode.pitch( frameEvent.timeSinceLastFrame * 20.0, ogre.Node.TransformSpace.TS_LOCAL )
        return sampleframework.FrameListener.frameStarted( self, frameEvent )

class LightFlasherControllerFunction(ogre.WaveformControllerFunction):
    def __init__( self, waveType, frequency, phase ):
        ogre.WaveformControllerFunction.__init__( self, waveType, 0, frequency, phase, 1, True )

class LightFlasher(ogre.RealControllerValue):
    def __init__( self, light, billboard, maxColour ):
        self.light = light
        self.billboard = billboard
        self.maxColour = maxColour
        self.intensity = 0.0

    def getValue( self ):
        return self.intensity

    def setValue( self, value ):
        self.intensity = value
        newColour = ogre.ColourValue()
        newColour.r = self.maxColour.r * value
        newColour.g = self.maxColour.g * value
        newColour.b = self.maxColour.b * value
        self.light.setDiffuseColour( newColour )
        self.billboard.setColour( newColour )

if __name__ == '__main__':
    application = LightingApplication()
    application.go()
    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -