光线与cube(AABB)相交-python

光线与cube(AABB)相交-python

原理

假设cube方向与坐标轴方向平行。

首先计算光线与各个轴的交点的k
取每个轴中k最大和最小的k。
再在最大的三个轴k中取最小的k 为 far,在最小的三个轴k中取最大k为near
如果 far > near。则相交。

def intersect_cube_gpu(bounds, ray_o, ray_d):
    """bounds[2,3],ray_o[N,3],ray_d[N,3]"""
    """calculate intersections with 3d bounding box"""
    #norm_d = np.linalg.norm(ray_d, axis=-1, keepdims=True)
    norm_d = torch.norm(ray_d, dim=-1, keepdim=True)
    tmin = (bounds[:1]  - ray_o) / ray_d  # N,3
    tmax = (bounds[1:2] - ray_o) / ray_d  # N,3

    t1 = torch.minimum(tmin, tmax) # N,3  #求两个纬度相同的tensor在对应位置的最值
    t2 = torch.maximum(tmin, tmax) # N,3
    near = torch.max(t1, axis=-1)[0] 
    far = torch.min(t2, axis=-1)[0]
    mask_at_box = torch.gt(far, near)
    near[mask_at_box] = near[mask_at_box] / norm_d[mask_at_box, 0]
    far[mask_at_box] =  far[mask_at_box] / norm_d[mask_at_box, 0]
    
    near[~mask_at_box] = 0
    far[~mask_at_box] = 0

https://gist.github.com/DomNomNom/46bb1ce47f68d255fd5d
https://github.com/zju3dv/neuralbody/blob/master/lib/utils/if_nerf/if_nerf_data_utils.py

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值