Ogre透明材质和纹理阴影

本文详细介绍了在Ogre引擎中如何实现物体透明,并提供了在.material文件中设置透明度的方法。同时,还解释了不同的阴影渲染技术及其应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Ogre实现物体透明

                       

Ogre::MaterialPtr meterialPtr=Ogre::MaterialManager::getSingleton().getByName(meterialName);
Ogre::Pass *pass=meterialPtr->getTechnique(0)->getPass(0);
if (pass)
{
pass->setSceneBlending(Ogre::SBT_TRANSPARENT_ALPHA);
pass->setDepthWriteEnabled(false);
/*pass->setDepthCheckEnabled(false);*/
pass->setDiffuse(1.0,1.0,1.0,(float)nAlpha/255);
//pass->getTextureUnitState(0)->setAlphaOperation(Ogre::LBX_MODULATE, Ogre::LBS_TEXTURE, Ogre::LBS_MANUAL,1.0, (float)nAlpha/255);
}

或者直接在材质文件里面配置

material 123

{

    technique

    {

        pass

        {

            ambient 0.588 0.588 0.588 1

            diffuse 1.0 1.0 1.0 0.15//修改alpha就可

            specular 0.045 0.045 0.045 1 10

            scene_blend alpha_blend

            depth_write off

            texture_unit

            {

                texture 123.bmp

            }

        }

    }

}

 

 

如何设置透明

在.material文件里,你可以设置 scene_blendadd, modulatealpha_blend.

scene_blend add

你可以使用JPEG 或 PNG文件为纹理
图象全黑的地方为透明
在爆炸,光晕,灯光等方面使用

scene_blend modulate

你可以使用JPEG或PNG文件为纹理, 纹理会根据背景进行想乘,通常它的颜色比图片
要暗. 纹理黑的部分为透明.

sene_blend alpha_blend

你可以使用PNG图象文件为纹理,要在PNG文件里设置透明,你需要用Photoshop来处理它
通过把背景层删除,并 在其他层使用橡皮擦.
被擦掉的地方为透明

投射阴影

一个实体可以投射影子,默认的,光不能投射阴影.
这里有4种阴影渲染的技术 TENCIL or TEXTURE, and ADDITIVE or MODULATIVE.
(CPU最适合是的SHADOWTYPE_TEXTURE_MODULATIVE)

STENCIL SHADOWS (模板阴影):

这个技术使用CPU来渲染
你可以设置最大距离(调用setShadowFarDistance),来维持一个好的帧率

投影的网格要是完全的(封闭和无洞).

避免过长的影子
避免对象距离光太近
这个技术允许自投影
这个影子有硬边(在影子和光之间进行硬转化)

TEXTURE SHADOWS (纹理阴影):

这个技术使用显卡进行渲染
这个技术只在方向光和聚光等下工作
这个技术不允许自投影
meshes 要定义 shadow caster 和 shadows receiver
避免过长的影子
避免对象距离光太近
影子有一个柔和的边缘
影子的颜色和精确度可以进行定义

例子:

mSceneMgr->setShadowsTechnique(SHADOWTYPE_TEXTURE_MODULATIVE);
mSceneMgr->setShadowColour( ColourValue(0.5, 0.5, 0.5) );
...
mLight->setCastShadows(true);
...
mCastingObject->setCastShadows(true);
mReceivingObject->setCastShadows(false);
...
myMaterial->setReceiveShadows(true);
...

注释: myMaterial->setReceiveShadows(true)指令可以替代在material文件里的receive_shadows on
在材质的默认设置里是ON, 你可以在在材质里设置为 OFF来不让他接收阴影,这样可以节省一些帧率

material VMtl06

{

   technique

   {

      pass

      {

        specular 0 0 0 1 1.7

        scene_blend alpha_blend

        alpha_rejection greater 128

        cull_hardware none

        cull_software none

        texture_unit

        {

           texture Tr094.png

        }

      }

   }

}

 

void CApplication::createScene()

  {

  //正常建立场景

  OgreMax::OgreMaxScene* m_maxScene1=new OgreMax::OgreMaxScene();

  m_maxScene1->Load("t1.scene",m_ActiveWindow,OgreMax::OgreMaxScene::NO_OPTIONS,m_SceneManager);

  m_SceneManager=m_maxScene1->GetSceneManager();

  //得到场景中的具体材质并对材质进行修改

  Ogre::MaterialPtr mat= MaterialManager::getSingleton().getByName

  ("ssA1mat512_OgreMax");

  mat->getTechnique(0)->getPass(0)->setSceneBlending(Ogre::SBT_REPLACE);

  }

转载于:https://www.cnblogs.com/virtorld/archive/2012/11/16/2773328.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值