Ogre如何將一個可渲染對象加進渲染隊列

來源:互聯網
上載者:User
判斷對象是否半透明實體
    //-----------------------------------------------------------------------    bool Pass::isTransparent(void) const    {// Transparent if any of the destination colour is taken into accountif (mDestBlendFactor == SBF_ZERO &&mSourceBlendFactor != SBF_DEST_COLOUR &&mSourceBlendFactor != SBF_ONE_MINUS_DEST_COLOUR &&mSourceBlendFactor != SBF_DEST_ALPHA &&mSourceBlendFactor != SBF_ONE_MINUS_DEST_ALPHA){    return false;}         else{    return true;}    }

 

    //-----------------------------------------------------------------------    void RenderPriorityGroup::addRenderable(Renderable* rend, Technique* pTech)    {        // Transparent and depth/colour settings mean depth sorting is required?        // Note: colour write disabled with depth check/write enabled means        //       setup depth buffer for other passes use.
        // 這個很長的if決定對象是否半透明實體        if (pTech->isTransparentSortingForced() || (pTech->isTransparent() &&             (!pTech->isDepthWriteEnabled() ||             !pTech->isDepthCheckEnabled() ||             pTech->hasColourWriteDisabled())))        {if (pTech->isTransparentSortingEnabled())addTransparentRenderable(pTech, rend);elseaddUnsortedTransparentRenderable(pTech, rend);        }        else        {            if (mSplitNoShadowPasses &&                mParent->getShadowsEnabled() &&(!pTech->getParent()->getReceiveShadows() ||rend->getCastsShadows() && mShadowCastersNotReceivers))            {                // Add solid renderable and add passes to no-shadow group                addSolidRenderable(pTech, rend, true);            }            else            {                if (mSplitPassesByLightingType && mParent->getShadowsEnabled())                {                    addSolidRenderableSplitByLightType(pTech, rend);                }                else                {                    addSolidRenderable(pTech, rend, false);                }            }        }    }

 

 

 

每一個RenderPriorityGroup由6個隊列組成
+  mSolidsBasic {msRadixSorter1={...} msRadixSorter2={...} mOrganisationMode='' ...} Ogre::QueuedRenderableCollection
+  mSolidsDiffuseSpecular {msRadixSorter1={...} msRadixSorter2={...} mOrganisationMode='' ...} Ogre::QueuedRenderableCollection
+  mSolidsDecal {msRadixSorter1={...} msRadixSorter2={...} mOrganisationMode='' ...} Ogre::QueuedRenderableCollection
+  mSolidsNoShadowReceive {msRadixSorter1={...} msRadixSorter2={...} mOrganisationMode='' ...} Ogre::QueuedRenderableCollection
+  mTransparentsUnsorted {msRadixSorter1={...} msRadixSorter2={...} mOrganisationMode='' ...} Ogre::QueuedRenderableCollection
+  mTransparents {msRadixSorter1={...} msRadixSorter2={...} mOrganisationMode='' ...} Ogre::QueuedRenderableCollection

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.