每天花30分钟看OGRE--(6) Demo_EnvMapping

每天花30分钟看OGRE--(6) Demo_EnvMapping
截图:

每天花30分钟看OGRE--(6) Demo_EnvMapping_第1张图片

参考对比下纯D3D的实现: 《精通DirectX 3D》第十二章 高级纹理应用 06_SphericalEnvMapping
    原理都是一样的,都是有个环境贴图,假的环境映射!


实现很简单,override createScene成员函数就可以了
     //  Just override the mandatory create scene method
     void  createScene( void )
    {
        
//  Set ambient light
        mSceneMgr -> setAmbientLight(ColourValue( 0.5 0.5 0.5 ));

        
//  Create a point light
        Light *  l  =  mSceneMgr -> createLight( " MainLight " );
        
//  Accept default settings: point light, white diffuse, just set position
        
//  NB I could attach the light to a SceneNode if I wanted it to move automatically with
        
//   other objects, but I don't
        l -> setPosition( 20 , 80 , 50 );

        Entity 
* ent  =  mSceneMgr -> createEntity( " head " " ogrehead.mesh " );

        
//  Set material loaded from Example.material
        ent -> setMaterialName( " Examples/EnvMappedRustySteel " );

        
//  Add entity to the root scene node
        mSceneMgr -> getRootSceneNode() -> createChildSceneNode() -> attachObject(ent);  
    }

对应的材质脚本在
ogrenew\Samples\Media\materials\scripts\Example.material
里,如下:

material Examples / EnvMappedRustySteel
{
    technique
    {
        pass
        {

            texture_unit
            {
                texture RustySteel.jpg
            }

            texture_unit
            {
                texture spheremap.png
                colour_op_ex add src_texture src_current
                colour_op_multipass_fallback one one
                env_map spherical // hew:这里指明环境映射的类型是球形环境映射
            }
        }
    }
}

ogrenew\Samples\Media\materials\textures\spheremap.png

每天花30分钟看OGRE--(6) Demo_EnvMapping_第2张图片

ogrenew\Samples\Media\materials\textures\RustySteel.jpg

每天花30分钟看OGRE--(6) Demo_EnvMapping_第3张图片







你可能感兴趣的:(每天花30分钟看OGRE--(6) Demo_EnvMapping)