二维射线与正方形相交

时间:2017-08-19 21:08:35

标签: vector geometry 2d raycasting

我正在做一个射线施法者。光线对象具有Vect2 originVect2 directionorigin是相机的矢量。方向由此代码计算

var a = (cam_dir - fov) + (((fov * 2) / width) * x);
// x is the current x position of the screen. width is screen width
var b = a * Math.PI / 180; // radians
ray.direction = new Vect2(Math.sin(b), Math.cos(b));

raycaster世界是一个阵列。每个项目都是0或正数。我循环使用这些值,这是我需要帮助的地方。

鉴于如上所述计算的光线以及宽度为1的方框,如何找到光线到光线与方框相交的点的距离?

如果您想要我的评论很多的代码,请查看此pastebin。有评论我需要帮助。 https://pastebin.com/vPfGzzdM

此外,您无需添加Vect2.add或减去或点或交叉等等。我知道如何做到这一点,我做了很多次,所以不要定义它们:)谢谢你uuuu

1 个答案:

答案 0 :(得分:0)

如果您需要找到所有带网格的交叉点,请查看here以获取Amanatides-Woo算法的链接。

如果仅使用一个方格,则为光线写入参数方程并将其求解为方形边

x = origin.x + direction.x * t
y = origin.y + direction.y * t

找到方形的左边缘或右边缘的参数t(取决于direction.x符号),以及方形的顶部或底部边缘(取决于direction.y符号)。检查交叉点是否在真正的方形边缘(不在其延续处),如果有两个有效的交叉点,则选择较小的t值。

line clipping

还有许多算法