ogre shader 使用可以参考这两个说明:
http://www.ogre3d.org/forums/viewtopic.php?f=2&t=76580#p483996
http://www.ogre3d.org/tikiwiki/tiki-index.php?page=RT+Shader+System
自己试了一把
//create scenemanager and camera
Ogre::SceneManager* sm=rt->createSceneManager(Ogre::ST_GENERIC,"testScence");
//shader
if(Ogre::RTShader::ShaderGenerator::initialize()){
Ogre::RTShader::ShaderGenerator* mShaderGenerator = Ogre::RTShader::ShaderGenerator::getSingletonPtr();
mShaderGenerator->setShaderCachePath("C:\\download\\OgreSDK_vc10_v1-8-1\\media\\RTShaderLib\\cache");
mShaderGenerator->addSceneManager(sm);
}
然后将shader材质设置
Ogre::Entity* et=sm->createEntity("robot.mesh");
//Ogre::ResourceGroupManager::getSingleton().create
et->setMaterial(Ogre::MaterialManager::getSingleton().getByName("RTSS/LayeredBlending"));// 这里在材质脚本中定义,文件在ogre media下shaderlib文件夹中
Ogre::SceneNode* node=sm->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(0,0,0));
node->attachObject(et);
node->roll(Ogre::Radian(0.9));
node->scale(1,1,3);
运行出错,发现resource没有添加进去
Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
"C:\\download\\OgreSDK_vc10_v1-8-1\\media\\RTShaderLib"
,"FileSystem"
,"RTShaderLib");
Ogre::ResourceGroupManager::getSingleton().addResourceLocation(
"C:\\download\\OgreSDK_vc10_v1-8-1\\media\\RTShaderLib\\materials"
,"FileSystem"
,"RTShaderLib");
加入之后运行成功,robot以前是全黄色的,现在有了条纹出来
脚本的定义
// This material demonstrates the texture blending extension.
material RTSS/LayeredBlending
{
technique
{
pass
{
lighting off
texture_unit
{
scale 0.1 0.1
texture rockwall.tga
}
texture_unit
{
// RT Shader system section - required by the layered blend extension.
rtshader_system
{
layered_blend luminosity
source_modifier src1_inverse_modulate custom 2
}
texture ogrelogo.png
}
}
}
}