作者andy13579372 (唐唐)
看板GameDesign
标题[问题] OGRE 程式汇入的mesh没有立体感(阴影)?
时间Sun Dec 29 18:18:44 2013
板友好
小弟第一次在这个板PO文 有疏漏之处麻烦指教!
刚开始摸OGRE,大概知道从建root到startRendering的流程但对背後观念不熟。
最近用OGRE1.9做房间模型动态展示,房间模型为预先拍摄好的ply档,没有表面图档。
使用这个部落格(
http://ppt.cc/E4zL )的教学把ply弄进程式。
但进去以後开启视窗,模型却没有立体的效果,只有一片灰,只看得出边缘。
不知道新的mesh要可以显示凹凸的形状还需要加甚麽步骤吗?
另外因为已经摸索了一阵子,(还是解决不了只好寻求帮忙),有想是不是material的问题
,因此有把官方Depth Shadow Mapping的教学加进去。(教学:
http://ppt.cc/1Z1x )
请问他为什麽会有那些片状碎掉的阴影?(或是这不是正确的解决方式?)
(更正: 图:
https://www.dropbox.com/s/grqxfs7nye4otpu/OgreProblem.png )
谢谢板友帮忙!!
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.4.176
1F:→ a27417332:要有阴影不是先要打光吗OAO 12/29 18:43
噢噢有! 附图是只有SpotLight,加上环境光或点光源都差不多的结果。
有把Sinbad放在旁边比对,没有加depth shadow mapping的material的时候,他身上都有
正确的阴影和形状,我的就只有灰一片~.~
※ 编辑: andy13579372 来自: 140.112.4.176 (12/29 19:42)
附上一些code:
1. SceneManager(参考自depth shadow mapping教学:
http://ppt.cc/1Z1x )
mSceneMgr->setShadowTextureCasterMaterial("Ogre/DepthShadowmap/Caster/Float");
mSceneMgr->setShadowTexturePixelFormat ( Ogre::PF_FLOAT32_R );
mSceneMgr->setShadowCasterRenderBackFaces( false );
mSceneMgr->setShadowTextureSelfShadow ( true );
mSceneMgr->setShadowTechnique( Ogre::SHADOWTYPE_TEXTURE_ADDITIVE_INTEGRATED );
mSceneMgr->setShadowFarDistance( 100 );
2. Light
Light *light = mSceneMgr->createLight( "light0" );
light->setType ( Light::LT_DIRECTIONAL );
light->setDirection ( Vector3( 0, -1, 1 ) );
light->setCastShadows( true );
light->setPowerScale ( 2 );
3. Entity
//** Read a .ply file and convert it to mesh
String meshMocap = "meshMocap";
CxMesh *mMocap = new CxMesh( meshMocap );
char* plyFileName = getPlyFileName();
StringStream sstream;
sstream << mProjectDir << "\\" << plyFileName;
mMocap->cxReadPly( sstream.str() );
mMocap->cxComposeMesh();
// myModel: Add a model to the scene
SceneNode* mModelNode = mSceneMgr->getRootSceneNode()->createChildSceneNode();
Entity* mModel = mSceneMgr->createEntity("MyModel", meshMocap);
//adjusting material used by mModel
MaterialPtr materialPtr =
MaterialManager::getSingleton().getByName("Template/Red");
Pass* pass0 = materialPtr->getTechnique(0)->getPass(0);
pass0 ->createTextureUnitState();
pass0 ->setCullingMode(CullingMode::CULL_NONE); //both sided
mModel->setMaterialName( "Template/Red" );
mModel->setCastShadows( true );
mModelNode->attachObject( mModel );
mModelNode->setPosition( 2, 2, 3 );
mModelNode->yaw( Degree(180) );
4. Material: "Templata/Red" 继承depth shadow mapping中的Basic----
material Template/Red : Ogre/DepthShadowmap/BasicTemplateMaterial
{
technique
{
pass
{
ambient 0.7 0.2 0.2 1
diffuse 0.8 0.2 0.2 1
emissive 0.2 0 0 1
}
}
}
麻烦了!!!
※ 编辑: andy13579372 来自: 140.112.4.176 (12/29 20:03)
※ 编辑: andy13579372 来自: 140.112.4.176 (12/29 20:04)
2F:推 valkidy:看不到图,不过听你的描述有可能是material的错误。 12/29 22:41
3F:→ valkidy:你可以试着在你的工作目录下搜寻 ogre.log 看看里面有没有 12/29 22:42
4F:→ valkidy:Exception 的讯息~ 12/29 22:42
谢谢你的回应!
不好意思,图修正了!!(dropbox发现没分享到)
(
https://www.dropbox.com/s/grqxfs7nye4otpu/OgreProblem.png )
Error和Exception大多是跟内建的DepthShadowmap.material有关的
虽然不太懂,不过应该跟我的没影响(我猜)
不过还有点问题的是,不太懂自身的凹凸立体效果和material的哪部分有关系??
之前也猜是material看了好久的material script还是一头雾水,
而且SDK的Sinbad.zip里的material只有简单的反色光、贴图、
receive_shadow on (调整这个对我的没有用) ,也没有继承任何material
因此还是非常疑惑。
有一个(蠢)问题: 所以空白的material(例如指定不存在的material而自动产生的那个),
是不会有立体效果的吗?!!
感谢各位!!!!
※ 编辑: andy13579372 来自: 118.168.238.32 (12/30 01:19)