OGRE Demo_EnvMapping

来源:互联网 发布:深度解析淘宝运营 pdf 编辑:程序博客网 时间:2024/05/17 01:54

截图:



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


实现很简单,override createScene成员函数就可以了

    // Just override the mandatory create scene method
    void createScene(void)
    {
        
// Set ambient light
        mSceneMgr->setAmbientLight(ColourValue(0.50.50.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 



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