【复习笔记】 cocos2d-x 2.x 渲染特效实现 七 辉光效果

本文介绍了如何在cocos2d-x 2.x中实现辉光效果,这种效果常用于模拟物体自发光,通过结合OpenGL ES 2.0和shader技术,利用glowmap和原图混合达到变亮效果。为了创建光晕,使用高斯模糊处理原图,以增强光的扩散效果。文章详细阐述了利用两次渲染到纹理(RTT)过程,分别生成节点树的贴图并进行横向高斯模糊,以实现细腻的辉光光晕效果。
摘要由CSDN通过智能技术生成

辉光效果经常用来做一些物体的自发光,这种发光效果不需要光照计算,只是在贴图上进行发光的模拟效果,所以有着很好的效率。辉光效果意味着贴图会变亮。为了对发光的部分做计算,需要一张glowmap贴图,当我们使用src和dst都为GL_ONE的方式,混合glowmap和原图时,原图就会对按照glowmap的样子变亮了~但是作为辉光的效果,仅仅只有变亮是不够的,由于光线在穿过空气时亮度会衰减,所以周围会有一圈逐渐消失的光晕。所以我们利用原图的模糊贴图的做glowmap,这样辉光就会有很好的光晕效果了~因为简单模糊效果不够细腻,光晕效果会不是很好,所以我们用高斯模糊来实现~

这次,我们需要对一个节点树的做高斯模糊处理,原因是这样之后,可以实现节点树的辉光效果,另外,单张贴图图片边缘不能模糊延伸的问题也可以得到解决~由于之前高斯模糊是需要做一次RTT才能实现的,而在这之前,要得到节点树的整屏贴图也要做一次RTT,所以,这次渲染过程中包含有两次RTT,按照先后顺序,具体作用分别是:生成节点树的贴图,做横向的高斯模糊。

void CCEffectSprite::visitGlow()
{
	float blursDis[2] = {_pixelSpan/_screenBufferSize.width, _pixelSpan/_screenBufferSize.height};
	GLint size = sizeof(ccV3F_C4B_T2F);
    long data = (long)&m_sQuad;

	/**/
    // gen a empty texture
    glGenTextures(1, &_texture);
    glBindTexture(GL_TEXTURE_2D, _texture);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, _screenBufferSize.width, _screenBufferSize.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    
    // gen a off-screen framebuffer
    GLint oldFBO;
    glGetIntegerv(GL_RENDERBUFFER_BINDING, &oldFBO);
    glGenFramebuffers(1, &_framebuff
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值