开启阴影模式
场景管理器
<span style="white-space:pre"> </span>mSceneMgr->setShadowTechnique(SHADOWTYPE_NONE);
mSceneMgr->setShadowColour(ColourValue(0.4,0.4,0.4));
if (mRoot->getRenderSystem()->getCapabilities()->hasCapability(RSC_HWRENDER_TO_TEXTURE))
{
// In D3D, use a 1024x1024 shadow texture
mSceneMgr->setShadowTextureSettings(1024, 2);
}
else
{
// Use 512x512 texture in GL since we can't go higher than the window res
mSceneMgr->setShadowTextureSettings(512, 2);
}
物体的
ent->setCastShadows(true);
说明:
setShadowTechnique 参数可以是一下几个
SHADOWTYPE_NONE(关闭)<pre name="code" class="cpp">mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_MODULATIVE);
stencil的两种
SHADOWTYPE_STENCIL_MODULATIVE
SHADOWTYPE_STENCIL_ADDITIVE
texture的两种
SHADOWTYPE_TEXTURE_MODULATIVE
SHADOWTYPE_TEXTURE_ADDITIVE
按照ogre对该函数的说明,Stencil-based的有点在于可以不是精度的画阴影,而且可以用于凹凸贴图之类的复杂的阴影。需要导出mesh时候选择 <span style="color: rgb(48, 48, 48); font-family: Verdana, Helvetica, Arial; line-height: 18px;">Edge Lists。但是这种方式不能handle有透明的阴影,而且cpu的工作量忒大,尤其是场景中有动画的物体时候。</span>
<span style="color: rgb(48, 48, 48); font-family: Verdana, Helvetica, Arial; line-height: 18px;">Texture-based的可以很好的handle透明的,跟stncil的相比,用很少量的cpu工作量,可以用顶点程序来计算。但是这种方式锯齿比较严重,需要配合 mSceneMgr->setShadowTextureSettings(1024, 2);函数来设置精度。
即想获得好的阴影最简单的可以用一下两种模式:
<pre name="code" class="cpp">mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_MODULATIVE);
第二种:
<pre name="code" class="cpp">mSceneMgr->setShadowTechnique(SHADOWTYPE_TEXTURE_MODULATIVE);
mSceneMgr->setShadowTextureSettings(1024, 2);