1. 程式人生 > >記錄ogre中gpu程式在compositor中使用問題

記錄ogre中gpu程式在compositor中使用問題

ogre中通過更改gpu程式中的引數,獲取到自己想要的渲染效果。在使用到compositor中時,跟一般通過材質中fragmentprogram更改是不同的。需要在某個compositor的監聽函式中,更改引數。
參考ogre的compositor例子,新建監聽類並繼承自Ogre::CompositorInstance::Listener,由於我需要的是在每一幀更改引數,所以重寫了notifyMaterialRender函式。具體方法如下:

if (mat->getName().find("自己的材質名稱")!=Ogre::String::npos)//之所以用find是因為材質到了compositor中會加字首進去,跟compositor檔案中的材質名有差別。具體原因是因為ogre在解析compositor時會新建材質
{ Ogre::GpuProgramParametersSharedPtr ptr= mat->getTechnique(0)->getPass(0)->getFragmentProgramParameters(); if (ptr->_findNamedConstantDefinition("br")) { ptr->setNamedConstant("br",(Ogre::Real)(mAssistCam->getPosition().z/10.0)); } }

總結:失敗的根本原因是compositor中材質,與材質管理器通過名稱獲取到的材質,並不是一個材質了。