现在的位置: 首页 > 综合 > 正文

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

抱歉!评论已关闭.