celshadingdemo.py

来自「使用stl技术,(还没看,是听说的)」· Python 代码 · 共 49 行

PY
49
字号
# CameraTracking.py
import localogre as ogre
import sampleframework

class CelShadingApplication(sampleframework.Application):
    def _createScene( self ):
        sceneManager = self.sceneManager

        capabilities = ogre.Root.getSingleton().getRenderSystem().getCapabilities()
        if not capabilities.hasCapability( ogre.Capabilities.RSC_VERTEX_PROGRAM ) or \
           not capabilities.hasCapability( ogre.Capabilities.RSC_FRAGMENT_PROGRAM ):
            raise 'Your card does not support vertex and fragment programs, so cannot run this demo. Sorry!'
        
        # Accept default settings: point light, white diffuse, just set position
        light = sceneManager.createLight( 'MainLight' )
        self.rotationNode = sceneManager.getRootSceneNode().createChildSceneNode( ogre.Vector3.ZERO, ogre.Quaternion.IDENTITY )
        self.rotationNode.createChildSceneNode( ogre.Vector3(20,40,50), ogre.Quaternion.IDENTITY ).attachObject( light )

        # create head entity
        entity = sceneManager.createEntity( 'head', 'ogrehead.mesh' )
        self.camera.setPosition( 20, 0, 100 )
        self.camera.lookAt( 0, 0, 0 )

        entity.getSubEntity(0).setMaterialName( 'Examples/OgreCelShading/Eyes' )
        entity.getSubEntity(1).setMaterialName( 'Examples/OgreCelShading/Skin' )
        entity.getSubEntity(2).setMaterialName( 'Examples/OgreCelShading/Earring' )
        entity.getSubEntity(3).setMaterialName( 'Examples/OgreCelShading/Teeth' )

        sceneManager.getRootSceneNode().createChildSceneNode( ogre.Vector3.ZERO,
                                                              ogre.Quaternion.IDENTITY ).attachObject( entity )
        self.renderWindow.getViewport(0).setBackgroundColour( ogre.ColourValue.White )

    def _createFrameListener( self ):
        self.frameListener = CelShadingListener( self.renderWindow, self.camera, self.rotationNode )
        self.root.addFrameListener( self.frameListener )

class CelShadingListener(sampleframework.FrameListener):
    def __init__( self, renderWindow, camera, rotationNode ):
        sampleframework.FrameListener.__init__( self, renderWindow, camera )
        self.rotationNode = rotationNode

    def frameStarted( self, frameEvent ):
        self.rotationNode.yaw( frameEvent.timeSinceLastFrame * 30, ogre.Node.TransformSpace.TS_LOCAL )
        return sampleframework.FrameListener.frameStarted( self, frameEvent )

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

⌨️ 快捷键说明

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