游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3092|回复: 2

OPENGL怎么才能做出一束光柱打在地面上的效果

[复制链接]

9

主题

29

帖子

35

积分

注册会员

Rank: 2

积分
35
发表于 2005-7-30 11:43:00 | 显示全部楼层 |阅读模式
问用OPENGL聚光灯怎样可以做出光柱打在舞台上的效果.为什么我OPENGL程序用了聚光灯后,根本达不到想要的效果.

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-8-1 15:13:00 | 显示全部楼层

Re:OPENGL怎么才能做出一束光柱打在地面上的效果

当然不是你想要的结果了,图形学里的“光照”含义是用来计算每点的最终颜色值,并不是说真能让你看的到“光线”在空气中的路径,这都是要你自已去完成的,属于特效一类的东西

你说的效果一般叫 Volumetric Lighting,实现的方法有很多种,在游戏中常用的方法,以墙上的一个窗口为例,阳光从外面射进来,则我们需要从窗口的mesh边界在光线方向上延伸出一段quad,这样最终形成一个筒状的新mesh,设置好mesh各点的颜色和alpha做混合,如果正确可以产生发射出光线的效果。这种方法一般需要对场景做预处理,光源位置不容易随意变动,但速度很快。现在应该是可以利用Shadow Volume做实时的更新。

我知道的还有一种基于mesh的方法是把窗口看作一张贴图上的alpha为0的区域,通过对这张贴图做切分(你可以以绝对的U/V方向做切分,也可以以重直视点方向做切分),从假想的光源位置入向切分的切口引出新quad,最终对形成的大量quad进行混合,也可以产生不错的效果。而且不需要做预处理,光源位置可以实时更新。但缺点是要想获得高质量则需要的切分数比较高,这样带来大量的blend操作,比较浪费填充率。这里(http://www.garagegames.com/index.php?sec=mg&mod=resource&page=view&qid=4402)有这种方法的代码和效果。

以上都是基于mesh的方法,可以比较容易在游戏中获得实时的应用,但常会出现走样,效果不是很逼真,其它还有基于物理的光线散射计算等方法,效果非常的好,但我就不太了解了

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-8-1 15:14:00 | 显示全部楼层

Re:OPENGL怎么才能做出一束光柱打在地面上的效果

至于光柱照在地上形成的光斑一般都直接贴图,效果也很好,没有必要计算真实的光照
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-26 16:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表