public void Execute() { float3 neg = new float3(-100000f, -100000f, -100000f); float3 pos = new float3(100000f, 100000f, 100000f); for (int i = 0; i < aabbs.Length; i++) { float3 min = random.NextFloat3(neg, pos); float3 max = random.NextFloat3(min, pos); float3 diff = max - min; float3 mult = random.NextFloat3(); mult = mult * mult; max = min + diff * mult; AabbEntity aabbEntity = new AabbEntity { entity = new Entity { Index = i, Version = 0 }, aabb = new AABB { min = min, max = max } }; aabbs[i] = aabbEntity; } }
public void Execute() { for (int i = 0; i < aabbs.Length - 1; i++) { AabbEntity current = aabbs[i]; for (int j = i + 1; j < aabbs.Length && aabbs[j].aabb.min.x <= current.aabb.max.x; j++) { float4 less = new float4(current.aabb.max.y, aabbs[j].aabb.max.y, current.aabb.max.z, aabbs[j].aabb.max.z); float4 more = new float4(aabbs[j].aabb.min.y, current.aabb.min.y, aabbs[j].aabb.min.z, current.aabb.min.z); if (math.bitmask(less < more) == 0) { overlaps.Add(new EntityPair(current.entity, aabbs[j].entity)); } } } }
public void Execute() { for (int i = 0; i < aabbs.Length - 1; i++) { AabbEntity current = aabbs[i]; for (int j = i + 1; j < aabbs.Length && aabbs[j].aabb.min.x <= current.aabb.max.x; j++) { if (!(current.aabb.max.y < aabbs[j].aabb.min.y || current.aabb.min.y > aabbs[j].aabb.max.y || current.aabb.max.z <aabbs[j].aabb.min.z || current.aabb.min.z> aabbs[j].aabb.max.z)) { overlaps.Add(new EntityPair(current.entity, aabbs[j].entity)); } } } }
public void Execute() { for (int i = 0; i < aabbs.Length - 1; i++) { AabbEntity current = aabbs[i]; for (int j = i + 1; j < aabbs.Length && aabbs[j].aabb.min.x <= current.aabb.max.x; j++) { int invalidatedx = math.select(0, 1, current.aabb.max.y < aabbs[j].aabb.min.y); int invalidatedy = math.select(0, 2, current.aabb.min.y > aabbs[j].aabb.max.y); int invalidatedz = math.select(0, 4, current.aabb.max.z < aabbs[j].aabb.min.z); int invalidatedw = math.select(0, 8, current.aabb.min.z > aabbs[j].aabb.max.z); if (0 == (invalidatedx | invalidatedy | invalidatedz | invalidatedw)) { overlaps.Add(new EntityPair(current.entity, aabbs[j].entity)); } } } }
public void Execute() { for (int i = 0; i < aabbs.Length - 1; i++) { AabbEntity current = aabbs[i]; for (int j = i + 1; j < aabbs.Length && aabbs[j].aabb.min.x <= current.aabb.max.x; j++) { bool x = current.aabb.max.y < aabbs[j].aabb.min.y; bool y = current.aabb.min.y > aabbs[j].aabb.max.y; bool z = current.aabb.max.z < aabbs[j].aabb.min.z; bool w = current.aabb.min.z > aabbs[j].aabb.max.z; bool result = x | y | z | w; if (!result) { overlaps.Add(new EntityPair(current.entity, aabbs[j].entity)); } } } }
public void Execute() { for (int i = 0; i < aabbs.Length - 1; i++) { AabbEntity current = aabbs[i]; for (int j = i + 1; j < aabbs.Length && aabbs[j].aabb.min.x <= current.aabb.max.x; j++) { bool4 invalidated; invalidated.x = current.aabb.max.y < aabbs[j].aabb.min.y; invalidated.y = current.aabb.min.y > aabbs[j].aabb.max.y; invalidated.z = current.aabb.max.z < aabbs[j].aabb.min.z; invalidated.w = current.aabb.min.z > aabbs[j].aabb.max.z; if (!math.any(invalidated)) { overlaps.Add(new EntityPair(current.entity, aabbs[j].entity)); } } } }
public void Execute() { for (int i = 0; i < aabbs.Length - 1; i++) { AabbEntity current = aabbs[i]; for (int j = i + 1; j < aabbs.Length && aabbs[j].aabb.min.x <= current.aabb.max.x; j++) { float4 less = new float4(current.aabb.max.y, aabbs[j].aabb.max.y, current.aabb.max.z, aabbs[j].aabb.max.z); float4 more = new float4(aabbs[j].aabb.min.y, current.aabb.min.y, aabbs[j].aabb.min.z, current.aabb.min.z); //bool4 tests = less < more; //if (!math.any(tests)) if (!math.any(less < more)) { overlaps.Add(new EntityPair(current.entity, aabbs[j].entity)); } } } }
public void Execute() { for (int i = 0; i < aabbs.Length - 1; i++) { AabbEntity current = aabbs[i]; for (int j = i + 1; j < aabbs.Length && aabbs[j].aabb.min.x <= current.aabb.max.x; j++) { bool invalidatedx = current.aabb.max.y < aabbs[j].aabb.min.y; bool invalidatedy = current.aabb.min.y > aabbs[j].aabb.max.y; bool invalidatedz = current.aabb.max.z < aabbs[j].aabb.min.z; bool invalidatedw = current.aabb.min.z > aabbs[j].aabb.max.z; bool xy = invalidatedx | invalidatedy; bool zw = invalidatedz | invalidatedw; if (!(xy | zw)) { overlaps.Add(new EntityPair(current.entity, aabbs[j].entity)); } } } }