Ogre学习如何使用着色器脚本
2014年09月05日
⁄ 综合
⁄ 共 854字 ⁄ 字号
小 中 大
Ogre学习如何使用着色器脚本(参考例子CelShading)
Ogre中如何使用着色器
- 通过SDK中的例子CelShading来了解如何使用着色器.
- 通过源码分析, 需要包含头文件 "RTShaderSystem/OgreRTShaderSystem.h", 以及库文件 OgreRTShaderSystem.lib
- 源码构造了一个类 ShaderGeneratorTechniqueResolverListener, 由类Ogre::MaterialManager::Listener派生而成.
- 使用 Ogre::RTShader::ShaderGenerator::initialize() 和 Ogre::RTShader::ShaderGenerator::finalize() 初始化和关闭着色器生成器
- 如何着色程序传递 uniform 参数
- 调用 Ogre::Entity::getSubEntity() 得到一个 Ogre::SubEntity
- 调用 Ogre::SubEntity::setCustomParameter 传递一个自定义 uniform 参数给着色器
- 本例传递了散色光颜色, 镜面光颜色, 以及 shininess 值
CelShading 使用的脚本分析
- 材质 Examples/CelShading
- vertex_program_ref和fragment_program_ref分别关联顶点着色器脚本和片段着色器脚本
- param_named_auto 定制了由Ogre更新的CUSTOM参数
- default_params 参数定制了一系列参数缺省的值
- 着色器原理: 顶点着色其计算三个浮点数 diffuse, specular, edge. diffuse 和 specular 则是根据光照公式计算出来的散射光和镜面光因子. edge 则为目标到眼睛的单位向量在法线上的投影值. 如果如果角度大于90, 则edge为0, 如果角度等于0, 则edge为1. 角度越小, 则可以表示更清晰的颜色. 在片段着色器中, 最终颜色为 diffuse * edge * 散射颜色 + specular * 镜面颜色.