GLSL实现HDR Rendering

  1. HDR - 全称High dynamic rang,是目前流行的3D特效技术.其基本原理是:虽然在计算机图形中可以使用完全的浮点型来表
  2. 示颜色,但之前由于一直受到硬件的限制,从外部载入的纹理格式大多只能以每种颜色成分用一个字节来表示,也就是0-255,
  3. 当这个低范围的颜色值转换为浮点型之后就会导致一定量的颜色间隔,而HDR技术通过采用浮点型的外部纹理格式弥补了原来
  4. 整型纹理格式所导致的颜色间隔,从而增强了计算机图形的颜色表现能力.当然这只是笼统的说法,而且每个人对同一个概念
  5. 的理解也不尽相同,所以我在本文的最后列出了一些个人认为比较有用的参考资料,这里只简单描述一下我的HDR - OpenGL实
  6. 现,其实HDR的理念理解了之后就会比较简单,但真要编码实现的话还是有很多东西需要琢磨.
  7. 下面列出的是主要渲染流程:
  8. 备注(FBO代表Frame Buffer Object)
  9. 1.渲染整个场景到FBO1
  10. 2.下采样FBO1到尺寸为原来1/4的FBO2中
  11. 3.下采样FBO2到尺寸为原来1/8的FBO3中
  12. DownSample片元着色器:
  13. uniform sampler2D g_SceneTexture;
  14. void main()
  15. {
  16.     gl_FragColor = texture2D(g_SceneTexture, gl_TexCoord[0].st);
  17. }
  18. 4.对经过两次下采样并保存在FBO3中的内容进行高斯过滤,并将处理过后的图像
  19.   保存在FBO4中(备注:高斯过滤分为横向过滤和纵向过滤两个通道,所以需要一个FBO5进行过渡)
  20. 高斯过滤片元着色器:
  21. const int g_iWeightNumber = 17;
  22.                                     
  23. uniform sampler2D g_DecalTexture;
  24. uniform bool g_bFilterModel;
  25. uniform float g_aryWeight[g_iWeightNumber]; // Blur权重数组
  26. uniform vec2 g_aryV
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值