[問題] OGRE 程式匯入的mesh沒有立體感(陰影)?

看板GameDesign (遊戲設計)作者 (唐唐)時間11年前 (2013/12/29 18:18), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/3 (看更多)
板友好 小弟第一次在這個板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

12/29 18:43, , 1F
要有陰影不是先要打光嗎OAO
12/29 18:43, 1F
噢噢有! 附圖是只有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)

12/29 22:41, , 2F
看不到圖,不過聽你的描述有可能是material的錯誤。
12/29 22:41, 2F

12/29 22:42, , 3F
你可以試著在你的工作目錄下搜尋 ogre.log 看看裡面有沒有
12/29 22:42, 3F

12/29 22:42, , 4F
Exception 的訊息~
12/29 22:42, 4F
謝謝你的回應! 不好意思,圖修正了!!(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)
文章代碼(AID): #1Il_S67Q (GameDesign)
文章代碼(AID): #1Il_S67Q (GameDesign)