我正在开发一款游戏,玩家必须在黑暗的走廊中行走。角色有一个手电筒,相机位于上方(如 GTA2 中)。我对着色算法有疑问。
所以我们有一个光源(黄色圆圈),一堆墙壁(绿色和蓝色线)和光矢量(红色箭头)。
我们所知道的:
- 光源和线路之间的距离;
- 线的长度;
- 光矢量坐标;
- 线不相互交叉;
- 线端点的角度;
问题:
如何让程序看到哪一行位于其他行的前面?例如,在图像中,我们可以看到绿线在蓝线的前面。
我们可以找到向量和两条线的交叉点,然后找到光源和交叉点之间的长度并比较它们以找到最近的线,但这会减慢程序的速度。此外,可能会出现蓝线将更靠近光源的情况(如果我们将光源稍微向上移动),但程序仍然必须看到蓝墙位于绿线后面。
也许我们可以以某种方式为每一行标记一些价值?
编辑:我还尝试使用公式为每条线创建一个值:a/alpha + b/beta
其中:
a - 光源与直线的第一个端点之间的距离
alpha - 直线的第一个端点的角度
b - 之间的距离光源和线
的第二个端点 beta - 线的第二个端点的
角度 必须反转其中一个角度。
但是为了使这个公式起作用,似乎必须有一些常数,例如:
a const/alpha + b const/beta
也许通过找到这个常数我可以给每一行一个值?