• 每天花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看来也是可以在脚本中配置的,有兴趣了再弄!

  • 相关阅读:
    PHP错误:Fatal error: session_start() 解决办法
    Flash 随机生成多个显示元件的ActionScript代码
    CMD 命令行查看端口被哪个程序占用,并根据PID值,找到相应的程序,关闭掉对应服务或进程!
    DB: 20 个数据库设计最佳实践
    ActionScript 3.0 组件!
    FLASH ActionScript 3.0 sns cocial game 开发中的定时器
    PHP 获取用户真实IP
    我想成为坐在路边鼓掌的人
    Mobile + Web 并举的Social Game开发模式
    addEventListener & removeEventListener || attachEvent & detachEvent
  • 原文地址:https://www.cnblogs.com/lai3d/p/1653635.html
Copyright © 2020-2023  润新知