我开始一个游戏项目,这将使字符在暗区躲藏。在一个黑暗的角落隐藏应该使它更难为其他字符来见你。

我需要的是,以计算照明条件如何,其中该角色位于一个方式。

在理想的情况是有一个

double getLightFactor(GameCharacter observer, GameCharacter target)

,因为我想可能有照明条件下,其中的光落在目标的,使得不同侧由不同量的光的击中。 但我很乐意沉降

double getLightFactor(GameCharacter target)

要得到的光为特定的字符不管你在哪里从观看或甚

double getLightFactor(int x, int z)

到刚刚得到的光在地形特定地图点。

的方法,需要考虑到,照明条件可以在游戏过程中改变帐户,但由于它是基于转一些重计算可以被允许。我打算所以它们需要被考虑在内,以及有可能使用手电筒(但是它们可以被建模和单独处理)。

我将使用OGRE3D来处理我的场景,但我会很乐意接受通用的解决方案或其他引擎甚至解决方案(我选择的发动机是不是刻在石头上)。

想法,论文还是真的任何相关信息是非常欢迎!

有帮助吗?

解决方案

您可以只呈现从观察者的到离屏缓冲区(即使是在一个相当低的分辨率)的观点场景考虑到当前的光设置。然后,你可以计算围绕目标人物中间的平均亮度值。

我不知道该OGRE3D发动机,但是这应该是处理你的问题相当通用的方法(它只是从不同的角度来看渲染场景毕竟...)

其他提示

喔男孩。这取决于发动机很多。我现在可以告诉你,你想第二个选项。

如何照明工作?它是动态的还是静态的?让我们假设这是两者的组合。

有关静态光照,附近的检查光照。它是基于要么顶点或纹理,无论哪种方式,你可以在几个点附近采样并取它们的平均值。看看引擎如何计算的模型灯光,挖掘到图形代码,看看那里的数据实际上来自,您可以使用相同的源。一些游戏有体积照明信息,地震2执行此在每个叶的基础上以BSP树(容易检查)和Quake 3具有体积纹理(也容易检查)。

然后,你需要添加动态灯光。你可以做到这一点的方法之一是从播放器(可能是几个不同的光线可以肯定的,从玩家的不同部分)对着光源拍摄的光线。看看有多少人被击中,并添加一点点你的电话号码为每一个,取决于光有多远。所有像样的游戏引擎有一个过程“的拍摄光线,看看它击中”,这是认可怎么办的视线,你如何找出子弹击中什么,当你碰到墙壁时会发生什么。不要拍太多的光线太远,因为它可能会很慢。

您就不必过于频繁地重新计算这个值,你可以做到这一点只要创建一个新的光源,然后每隔左右。

根据环境的复杂性,你可以欺骗和利用覆盖在地形2D光照。每个单元将基于所述邻近光源具有光强度值。这将是快速的,甚至来计算移动物体,并快速访问,以确定位置的“黑暗”。

您可以使用取决于你有灯的类型的简单框或圆的算法必须能够“邮票”形状在其上。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top