2017-08-19 79 views
0

我正在制造射线施法者。射线物体有Vect2 originVect2 directionorigin是相机的向量。方向由此代码计算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

回答

0

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

如果只有一个正方形,写射线参数方程和解决这些问题为直角边缘

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

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

还有很多算法line clipping