NeroReflex

Untitled

Nov 7th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.84 KB | None | 0 0
  1. /**
  2.  * Apply a transform to the given AABB.
  3.  *
  4.  * @param starting the AABB transformation will be applied to
  5.  * @param transformMatrix the transform to be applied to all vertices of the AABB, given as a 4x4 matrix
  6.  * @return thetransformed AABB
  7.  */
  8. AABB transformAABB(const AABB starting, const mat4 transformMatrix) {
  9.     vec4 v[8] = {
  10.         transformMatrix * vec4(starting.position.x, starting.position.y, starting.position.z, 1),
  11.         transformMatrix * vec4(starting.position.x, starting.position.y, starting.position.z + starting.dimensions.z, 1),
  12.         transformMatrix * vec4(starting.position.x, starting.position.y + starting.dimensions.y, starting.position.z, 1),
  13.         transformMatrix * vec4(starting.position.x, starting.position.y + starting.dimensions.y, starting.position.z + starting.dimensions.z, 1),
  14.         transformMatrix * vec4(starting.position.x + starting.dimensions.x, starting.position.y, starting.position.z, 1),
  15.         transformMatrix * vec4(starting.position.x + starting.dimensions.x, starting.position.y, starting.position.z + starting.dimensions.z, 1),
  16.         transformMatrix * vec4(starting.position.x + starting.dimensions.x, starting.position.y + starting.dimensions.y, starting.position.z, 1),
  17.         transformMatrix * vec4(starting.position.x + starting.dimensions.x, starting.position.y + starting.dimensions.y, starting.position.z + starting.dimensions.z, 1),
  18.     };
  19.  
  20.     float maxX = minusInfinity, maxY = minusInfinity, maxZ=minusInfinity, minX=infinity, minY=infinity, minZ=infinity;
  21.  
  22.     for (uint i = 0; i < 8; ++i) {
  23.         maxX = (v[i].x > maxX) ? v[i].x : maxX;
  24.         maxY = (v[i].y > maxY) ? v[i].y : maxY;
  25.         maxZ = (v[i].z > maxZ) ? v[i].z : maxZ;
  26.         minX = (v[i].x < minX) ? v[i].x : minX;
  27.         minY = (v[i].y < minY) ? v[i].y : minY;
  28.         minZ = (v[i].z < minZ) ? v[i].z : minZ;
  29.     }
  30.  
  31.     return AABB(vec4(minX, minY, minZ, 1), vec4(maxX-minX, maxY-minY, maxZ-minZ, 0));
  32. }
Advertisement
Add Comment
Please, Sign In to add comment