我正在做一个射线施法者。光线对象具有Vect2 origin
和Vect2 direction
。 origin
是相机的矢量。方向由此代码计算
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 :(得分:0)
如果您需要找到所有带网格的交叉点,请查看here以获取Amanatides-Woo算法的链接。
如果仅使用一个方格,则为光线写入参数方程并将其求解为方形边
x = origin.x + direction.x * t
y = origin.y + direction.y * t
找到方形的左边缘或右边缘的参数t(取决于direction.x符号),以及方形的顶部或底部边缘(取决于direction.y符号)。检查交叉点是否在真正的方形边缘(不在其延续处),如果有两个有效的交叉点,则选择较小的t
值。