Ogre学习如何使用着色器脚本(参考例子CelShading)

大哥们,打扰一下,Ogre学习如何使用着色器脚本(参考例子CelShading)
最新回答
肆情

2024-05-09 12:14:58

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 * 镜面颜色.