ogre shader传参,给uniform传参第二种方式

转载自: http://blog.sina.com.cn/s/blog_7c8dc2d50101ce2p.html


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

(2012-12-05 18:18:04)
标签: 

杂谈

 
分类: Ogre3d渲染引擎


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值