我正在编写一个第一人称射击游戏,使用光线转换来渲染世界。我已成功添加 y 剪切,以便我可以向上和向下查看(尽管如预期的那样有一点扭曲)。如果我的 y 间距值为零,则地平线(由细红线表示)位于屏幕的中心。
如果我完全向下看,我的 y 间距值等于 -half_screen_height,因为该偏移量会添加到地平线。您可以在顶部附近看到同样细的地平线。
对于完全向上查找,则相反。 现在,我面临的问题是我想结合垂直瞄准来瞄准高度高于零的敌人,如下所示:
我能够追踪 2D 射弹,因为我有玩家的视角,从那里我可以在循环中步进一定的 X 和 Y 量,这样 x += cos(theta) *步骤
和y += sin(theta) * 步骤
。这相当容易。但为了在第三维度进行追踪,我需要另一个角度来告诉我向上或向下看的程度。有谁知道如何将 y 节距水平线偏移转换为角度吗?
编辑:澄清一下,一位评论者说这是海拔变化,但事实并非如此。下面的 GIF 演示了 y 剪切(首先显示)和更改玩家高度(第二次显示)之间的差异。对于给定的 y 间距值,它会添加到屏幕上每个墙柱的 y 位置,从而将其向上移动;但这不是海拔变化。
注意:由于 stackoverflow 的 2mb 大小限制,GIF 被高度压缩。
最佳答案
我是这样看的:
因此,您的目标与剪切力和一些预定义的垂直距离(或到目标的距离)形成直角三角形,因此:
tan(tilt) = shear/d
tilt = atan(shear/d)
剪切
已签名,因此倾斜
也将签名...
这个想法是,直角三角形中边的比率将为您提供 tan
或 ctg
(这取决于 2 个角度中的哪一个以及边的顺序)比率)。 atan,actg
是 tan,ctg
的反函数,因此将其应用于比率或 tan
将获得原始倾斜角度...
您凭经验确定:
d=half_screen_w/tan(fov/2.0)
所以就像枪的末端靠近投影平面。
关于graphics - 将 y 剪切地平线偏移转换为光线转换器中的俯仰角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69485992/