Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Apply a transform to the given AABB.
- *
- * @param starting the AABB transformation will be applied to
- * @param transformMatrix the transform to be applied to all vertices of the AABB, given as a 4x4 matrix
- * @return thetransformed AABB
- */
- AABB transformAABB(const AABB starting, const mat4 transformMatrix) {
- vec4 v[8] = {
- transformMatrix * vec4(starting.position.x, starting.position.y, starting.position.z, 1),
- transformMatrix * vec4(starting.position.x, starting.position.y, starting.position.z + starting.dimensions.z, 1),
- transformMatrix * vec4(starting.position.x, starting.position.y + starting.dimensions.y, starting.position.z, 1),
- transformMatrix * vec4(starting.position.x, starting.position.y + starting.dimensions.y, starting.position.z + starting.dimensions.z, 1),
- transformMatrix * vec4(starting.position.x + starting.dimensions.x, starting.position.y, starting.position.z, 1),
- transformMatrix * vec4(starting.position.x + starting.dimensions.x, starting.position.y, starting.position.z + starting.dimensions.z, 1),
- transformMatrix * vec4(starting.position.x + starting.dimensions.x, starting.position.y + starting.dimensions.y, starting.position.z, 1),
- transformMatrix * vec4(starting.position.x + starting.dimensions.x, starting.position.y + starting.dimensions.y, starting.position.z + starting.dimensions.z, 1),
- };
- float maxX = minusInfinity, maxY = minusInfinity, maxZ=minusInfinity, minX=infinity, minY=infinity, minZ=infinity;
- for (uint i = 0; i < 8; ++i) {
- maxX = (v[i].x > maxX) ? v[i].x : maxX;
- maxY = (v[i].y > maxY) ? v[i].y : maxY;
- maxZ = (v[i].z > maxZ) ? v[i].z : maxZ;
- minX = (v[i].x < minX) ? v[i].x : minX;
- minY = (v[i].y < minY) ? v[i].y : minY;
- minZ = (v[i].z < minZ) ? v[i].z : minZ;
- }
- return AABB(vec4(minX, minY, minZ, 1), vec4(maxX-minX, maxY-minY, maxZ-minZ, 0));
- }
Advertisement
Add Comment
Please, Sign In to add comment