📄 lightingdemo.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 + -