ogre render to texture 设置透明

这个问题其实就是 rtt+texture设置透明

 

代码如下

 

代码
    
      
Ogre::TexturePtr rtt_texture = Ogre::TextureManager::getSingleton().createManual( " RttTex " , Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
Ogre::TEX_TYPE_2D, mWindow
-> getWidth(), mWindow -> getHeight(), 0 , Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET);

Ogre::RenderTexture
* renderTexture = rtt_texture -> getBuffer() -> getRenderTarget();

renderTexture
-> addViewport(mCamera);
renderTexture
-> getViewport( 0 ) -> setClearEveryFrame( true );
renderTexture
-> getViewport( 0 ) -> setBackgroundColour(Ogre::ColourValue::Black);
renderTexture
-> getViewport( 0 ) -> setOverlaysEnabled( false );


renderTexture
-> update();
renderTexture
-> writeContentsToFile( " start.png " );

mMiniScreen
= new Ogre::Rectangle2D( true );
mMiniScreen
-> setCorners( 0.5f , - 0.5f , 1.0f , - 1.0f );
mMiniScreen
-> setBoundingBox(Ogre::AxisAlignedBox( - 100000.0f * Ogre::Vector3::UNIT_SCALE, 100000.0f * Ogre::Vector3::UNIT_SCALE));


Ogre::SceneNode
* miniScreenNode = mSceneMgr -> getRootSceneNode() -> createChildSceneNode( " MiniScreenNode " );

miniScreenNode
-> attachObject(mMiniScreen);

Ogre::MaterialPtr renderMaterial
= Ogre::MaterialManager::getSingleton().create( " RttMat " , Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
Ogre::Technique
* matTechnique = renderMaterial -> createTechnique();
matTechnique
-> createPass();
renderMaterial
-> getTechnique( 0 ) -> getPass( 0 ) -> setLightingEnabled( false );
renderMaterial
-> getTechnique( 0 ) -> getPass( 0 ) -> createTextureUnitState( " RttTex " );

renderMaterial
-> getTechnique( 0 ) -> getPass( 0 ) -> setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); // SBT_TRANSPARENT_COLOUR

// material->getTechnique(0)->getPass(0)->setTransparentSortingEnabled(true);

renderMaterial
-> getTechnique( 0 ) -> getPass( 0 ) -> getTextureUnitState( 0 ) -> setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_MANUAL, 1.0 , 0.1 ); // 0.8为透明度

mMiniScreen
-> setMaterial( " RttMat " );

 

代码
   
     
Ogre::TexturePtr rtt_texture = Ogre::TextureManager::getSingleton().createManual( " RttTex " , Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
Ogre::TEX_TYPE_2D, mWindow
-> getWidth(), mWindow -> getHeight(), 0 , Ogre::PF_R8G8B8, Ogre::TU_RENDERTARGET);

Ogre::RenderTexture
* renderTexture = rtt_texture -> getBuffer() -> getRenderTarget();

renderTexture
-> addViewport(mCamera);
renderTexture
-> getViewport( 0 ) -> setClearEveryFrame( true );
renderTexture
-> getViewport( 0 ) -> setBackgroundColour(Ogre::ColourValue::Black);
renderTexture
-> getViewport( 0 ) -> setOverlaysEnabled( false );


renderTexture
-> update();
renderTexture
-> writeContentsToFile( " start.png " );

mMiniScreen
= new Ogre::Rectangle2D( true );
mMiniScreen
-> setCorners( 0.5f , - 0.5f , 1.0f , - 1.0f );
mMiniScreen
-> setBoundingBox(Ogre::AxisAlignedBox( - 100000.0f * Ogre::Vector3::UNIT_SCALE, 100000.0f * Ogre::Vector3::UNIT_SCALE));


Ogre::SceneNode
* miniScreenNode = mSceneMgr -> getRootSceneNode() -> createChildSceneNode( " MiniScreenNode " );

miniScreenNode
-> attachObject(mMiniScreen);

Ogre::MaterialPtr renderMaterial
= Ogre::MaterialManager::getSingleton().create( " RttMat " , Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
Ogre::Technique
* matTechnique = renderMaterial -> createTechnique();
matTechnique
-> createPass();
renderMaterial
-> getTechnique( 0 ) -> getPass( 0 ) -> setLightingEnabled( false );
renderMaterial
-> getTechnique( 0 ) -> getPass( 0 ) -> createTextureUnitState( " RttTex " );

renderMaterial
-> getTechnique( 0 ) -> getPass( 0 ) -> setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA); // SBT_TRANSPARENT_COLOUR

// material->getTechnique(0)->getPass(0)->setTransparentSortingEnabled(true);

renderMaterial
-> getTechnique( 0 ) -> getPass( 0 ) -> getTextureUnitState( 0 ) -> setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_MANUAL, 1.0 , 0.1 ); // 0.8为透明度

mMiniScreen
-> setMaterial( " RttMat " );

终于会插入代码了 不用一点点 回车了 。。

 

这段内容比较多 除了 取出rtt 设置 透明 还有些别的内容

 

这段内容 是单独设置纹理透明的:

 

方法一 材质脚本模板:



material Template/TransparentTexture

 {

   technique

   {

     pass

     {

       lighting off

       scene_blend alpha_blend

       depth_write off

 

       texture_unit

       {

         texture image.png

         alpha_op_ex source1 src_manual src_texture 0.5      

       }

     }

   }

 }

 

方法二 程序代码:



material->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA);//SBT_TRANSPARENT_COLOUR



//material->getTechnique(0)->getPass(0)->setTransparentSortingEnabled(true);



material->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_MANUAL,1.0, 0.8); // 0.8为透明度

 

 

你可能感兴趣的:(text)