将 y-shearing horizon 偏移量转换为光线投射器中的俯仰角

Translating a y-shearing horizon offset to a pitch angle in a raycaster

我正在编写一个 first-person 射击游戏,使用光线投射来渲染世界。我已成功添加 y-shearing,这样我就可以向上和向下查看(尽管如预期的那样有点变形)。如果我的 y-pitch 值为零,则 horizon 线(由红色细线表示)位于屏幕中央。

如果我完全向下看,我的 y-pitch 值等于 -half_screen_height,因为该偏移量已添加到 horizon 行。您可以在顶部附近看到相同的 horizon 细线。

对于完全向上看,反之亦然。 现在,我面临的问题是我想合并垂直瞄准以瞄准高度高于零的敌人,就像这个:

我能够追踪一个 2D 射弹,因为我有玩家的视角,从那里我可以在一个循环中步进一定的 X 和 Y 量,所以 x += cos(theta) * stepy += sin(theta) * step.这很容易。但是为了在第 3 维进行追踪,我需要另一个角度来告诉我向上或向下看的程度。有谁知道如何将 y-pitch horizon 线偏移转换为角度?

编辑:澄清一下,一位评论者说这是高度变化,这不是真的。下面的 GIF 演示了 y-shearing(第一个显示)和更改玩家高度(第二个显示)之间的区别。对于给定的 y-pitch 值,它被添加到屏幕上每个墙列的 y 位置,从而向上移动;但这不是高度变化。

注意:由于 Whosebug 的 2mb 大小限制,GIF 压缩得很厉害。

我是这样看的:

所以你的目标形成一个直角三角形以及剪切和一些预定义的垂直距离(或到目标的距离)所以:

tan(tilt) =      shear/d
    tilt  = atan(shear/d)

shear 已签名,因此 tilt 也将被签名...

这个想法是,直角三角形的边比会给你 tanctg(这取决于 2 个角中的哪一个以及边的比例顺序)。并且 atan,actgtan,ctg 的反函数,因此将其应用于比率或 tan 将获得原始倾斜角...

您凭经验确定:

d=half_screen_w/tan(fov/2.0)

所以它的枪尾在投影平面附近。