GraphicsLab Project之辉光(Glare,Glow)效果

作者:i_dovelemon

日期:2016 / 07 / 02

来源:CSDN

主题:Render to Texture, Post process, Glare, Glow, Multi-pass rendering



引言



        从GraphicsLab Project项目立项以来,一直都在忙着搭建Shader的实验环境,现在基本的实验环境已经搭建完毕,所以就试着使用它来编写一些效果。本篇文章就将向大家讲述,如何在OpenGL中,使用GLSL编写出辉光效果。


辉光(Glare,Glow)



       辉光效果,也就是Glare,Glow效果。它的主要作用是模拟一些场景中发光物体周边的朦胧模糊的发光效果,有点类似于PS中的外发光。先来看一看这种效果的实际图片,给大家一个感性的认识。


图1


图2


图3

       上面图片给大家展示了辉光效果能够带来的视觉体验。为场景中的发光物体添加辉光效果,能够实现灯光的朦胧感觉。当然,为了整体画面的和谐也不能乱用此效果,否则就给人一种很俗气的感觉。


原理



        下面给大家讲述下这种效果的实现方式。其实说白了它的实现原理很简单,我们只要对要添加辉光效果的物体进行一次模糊操作,然后将模糊过后的图片与原先的图片进行Alpha Blend,就能够得到上面所示的效果。操作如图所展示的那样(这里为了简便,只在场景中绘制Glare物体,并且只添加了些许光照,没有添加其他效果):


图4 未进行模糊的原场景


图5 对原场景进行模糊之后的图像


图6 将模糊之后的场景与原场景进行Alpha blend之后的最终效果

        上面三张图片展示了绘制一个简单辉光效果的整体步骤。原理是不是十分的简单???大家可以自己在PS等图像处理软件中,直接模拟看看是否能够得出这种效果来。


OpenGL实现



        在讲述具体的实现之前,我们需要先了解一些基本的知识点。在了解了这些知识点的基础之上,我们才能够实现这种效果。

渲染到纹理(Render to Texture, RTT)


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
这里提供一个基于 Python 和 Pygame 的辉光管时钟效果的钟表小程序。需要先安装 Pygame 库。 ```python import pygame import time # 定义数字的字典 DIGITS = { 0: ['###', '# #', '# #', '# #', '###'], 1: [' #', ' #', ' #', ' #', ' #'], 2: ['###', ' #', '###', '# ', '###'], 3: ['###', ' #', '###', ' #', '###'], 4: ['# #', '# #', '###', ' #', ' #'], 5: ['###', '# ', '###', ' #', '###'], 6: ['###', '# ', '###', '# #', '###'], 7: ['###', ' #', ' #', ' #', ' #'], 8: ['###', '# #', '###', '# #', '###'], 9: ['###', '# #', '###', ' #', '###'] } # 定义颜色 BLACK = (0, 0, 0) YELLOW = (255, 255, 0) # 初始化 Pygame pygame.init() # 创建窗口 size = (600, 300) screen = pygame.display.set_mode(size) pygame.display.set_caption("Nixie Clock") # 循环直到用户点击关闭窗口 done = False # 创建一个时钟对象 clock = pygame.time.Clock() while not done: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: done = True # 获取当前时间 current_time = time.strftime("%H%M%S") # 清屏 screen.fill(BLACK) # 绘制数字 for i, digit in enumerate(current_time): # 计算数字的位置 x = i * 70 + 50 y = 100 # 绘制数字的每一行 for row, line in enumerate(DIGITS[int(digit)]): for col, char in enumerate(line): if char == '#': # 绘制亮点 pygame.draw.circle(screen, YELLOW, (x + col * 10, y + row * 10), 3) # 刷新屏幕 pygame.display.flip() # 延迟 1 秒 clock.tick(1) # 关闭 Pygame pygame.quit() ``` 每个数字都用一个 5x3 的矩阵来表示,'#'表示亮点。在程序中,我们用一个字典来存储每个数字的矩阵。然后,我们在循环中获取当前时间,计算每个数字的位置,然后绘制出来。程序中使用了 Pygame 的窗口和绘图函数来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值