每天花30分钟看OGRE--(15)3D Overlay Element

16.Overlay里可以放3d元素?

如果这样的话,就可以用来做3d的新手引导小精灵了!不用再跟巨人一样用序列帧了!

depth_check on时

clip_image002[4]

depth_check off后

clip_image004[4]

代码
material Examples/DepthCheck
{
    technique
    {
        pass
        {
            depth_check off
            
            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
            }
        }
    }
}

 

在c++代码里 

 代码

        Overlay* pOverlay = OverlayManager::getSingleton().getByName("Core/DebugOverlay");
        
if (pOverlay)
        {
            SceneManager
* pSM = OGRE_NEW DefaultSceneManager("Overlay SceneManager");
            SceneNode
* pNode = OGRE_NEW SceneNode(pSM, "Overlay Node");
            pNode
->setPosition(-10,10,-160);
            Entity
* pEnt = mSceneMgr->createEntity("head""ogrehead.mesh");
           
// 如果指定material脚本的话,在脚本里关闭depth check
//pEnt->setMaterialName("Examples/DepthCheck");
            pNode->attachObject(pEnt);
           
// 如果不指定material脚本的话,关闭每个pass的depth check
            for (unsigned int i = 0; i < pEnt->getNumSubEntities(); ++i)
            {
                SubEntity
* pSubEnt = pEnt->getSubEntity(i);
                
if (pSubEnt)
                {
                    Technique
* pTech = pSubEnt->getMaterial()->getBestTechnique();
                    
if (pTech)
                    {
                        
for (unsigned int iPass = 0; iPass < pTech->getNumPasses(); ++iPass)
                        {
                            Pass
* pPass = pTech->getPass(iPass);
                            
if (pPass)
                            {
                                pPass
->setDepthCheckEnabled(false);
                            }                            
                        }                        
                    }                    
                }                
            }            
            pOverlay
->add3D(pNode);
        }

 

这样子关闭了pass的depth_check后,如果在场景里也用这个模型并且使用这个pass渲染的时候就没有depth_check了。反正屏幕上用的一般不会在场景里使用,所以也没问题了。

改了下position试了下,发现Overlay坐标系如下

clip_image005[4]

右手坐标系,ViewPort中心是原点.

可以继续YY下,播放角色骨骼动画及声音,以及屏幕上的运动轨迹,就可以用来做新手引导小精灵了!用来做个3D的施法进度条也可以啊!

虽然OGRE的表层元素类和表层容器类被设计为是可供应用程序开发人员扩展的,但是有一些元素是Ogre本身自带的。包括:

· Panel

· BorderPanel

· TextArea

3D的Overlay Element看来也是可以在脚本中配置的,有兴趣了再弄!

posted @ 2010-01-21 20:55  CG迷途大熊猫  阅读(3282)  评论(0编辑  收藏  举报