【发布时间】:2019-08-21 10:41:11
【问题描述】:
我正在尝试计算与 MDL 边界框的交集,我的代码基于 WM 在http://metalbyexample.com/picking-hit-testing/#more-738 的精彩文章
但这并没有发生
extension MDLAxisAlignedBoundingBox {
func intersect(_ ray: Ray) -> float4? {
var tmin = minBounds
var tmax = maxBounds
let inverseDirection = 1 / ray.direction
var sign : [Int] = [(inverseDirection.x < 0) ? 1 : 0,(inverseDirection.y < 0) ? 1 : 0,(inverseDirection.z < 0) ? 1 : 0]
var bounds : [float3] = [minBounds,maxBounds]
var t0 = Float(minBounds.z)
if ((tmin.x > tmax.y) || (tmin.y > tmax.x)){
return nil
}
if (tmin.y > tmin.x){
tmin.x = tmin.y;
}
if (tmax.y < tmax.x){
tmax.x = tmax.y;
}
tmin.z = (bounds[sign[2]].z - ray.origin.z) * inverseDirection.z
tmax.z = (bounds[1-sign[2]].z - ray.origin.z) * inverseDirection.z
if ((tmin.x > tmax.z) || (tmin.z > tmax.x)){
return nil
}
if (tmin.z > tmin.x){
tmin.x = tmin.z
t0 = tmin.x
}
if (tmax.z < tmax.x){
tmax.x = tmax.z
t0 = tmax.z
}
return float4(ray.origin + ray.direction * t0, 1)
}
}
预计最后到达的结果应该是最短的向量。
提前谢谢你
【问题讨论】:
-
你找到解决方案了吗?如果是请分享
-
是的,我一个月前就知道了。