2维射线与正方形相交
问题描述:
我正在制造射线施法者。射线物体有Vect2 origin
和Vect2 direction
。 origin
是相机的向量。方向由此代码计算2维射线与正方形相交
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
答
如果您需要查找与网格的所有交点,请查看here以获取Amanatides-Woo算法的链接。
如果只有一个正方形,写射线参数方程和解决这些问题为直角边缘
x = origin.x + direction.x * t
y = origin.y + direction.y * t
查找参数t为正方形(取决于direction.x符号)的左边缘或右边缘,以及用于顶或方形的底部边缘(取决于direction.y标志)。检查交叉点是否在实际的方形边缘(不在其延续处),如果有两个有效的交叉点,则选择较小的值t
。
还有很多算法line clipping