fromAabb3 static method

Geometry fromAabb3(
  1. Aabb3 aabb, {
  2. bool normals = true,
  3. bool uvs = true,
})

Implementation

static Geometry fromAabb3(Aabb3 aabb,
    {bool normals = true, bool uvs = true}) {
  // Get the center and half extents from the AABB
  final center = aabb.center;
  final halfExtents = Vector3.zero();
  aabb.copyCenterAndHalfExtents(center, halfExtents);

  // Create vertices list with transformed coordinates
  final vertices = Float32List.fromList([
    // Front face
    center.x - halfExtents.x, center.y - halfExtents.y,
    center.z + halfExtents.z,
    center.x + halfExtents.x, center.y - halfExtents.y,
    center.z + halfExtents.z,
    center.x + halfExtents.x, center.y + halfExtents.y,
    center.z + halfExtents.z,
    center.x - halfExtents.x, center.y + halfExtents.y,
    center.z + halfExtents.z,

    // Back face
    center.x - halfExtents.x, center.y - halfExtents.y,
    center.z - halfExtents.z,
    center.x - halfExtents.x, center.y + halfExtents.y,
    center.z - halfExtents.z,
    center.x + halfExtents.x, center.y + halfExtents.y,
    center.z - halfExtents.z,
    center.x + halfExtents.x, center.y - halfExtents.y,
    center.z - halfExtents.z,

    // Top face
    center.x - halfExtents.x, center.y + halfExtents.y,
    center.z - halfExtents.z,
    center.x - halfExtents.x, center.y + halfExtents.y,
    center.z + halfExtents.z,
    center.x + halfExtents.x, center.y + halfExtents.y,
    center.z + halfExtents.z,
    center.x + halfExtents.x, center.y + halfExtents.y,
    center.z - halfExtents.z,

    // Bottom face
    center.x - halfExtents.x, center.y - halfExtents.y,
    center.z - halfExtents.z,
    center.x + halfExtents.x, center.y - halfExtents.y,
    center.z - halfExtents.z,
    center.x + halfExtents.x, center.y - halfExtents.y,
    center.z + halfExtents.z,
    center.x - halfExtents.x, center.y - halfExtents.y,
    center.z + halfExtents.z,

    // Right face
    center.x + halfExtents.x, center.y - halfExtents.y,
    center.z - halfExtents.z,
    center.x + halfExtents.x, center.y + halfExtents.y,
    center.z - halfExtents.z,
    center.x + halfExtents.x, center.y + halfExtents.y,
    center.z + halfExtents.z,
    center.x + halfExtents.x, center.y - halfExtents.y,
    center.z + halfExtents.z,

    // Left face
    center.x - halfExtents.x, center.y - halfExtents.y,
    center.z - halfExtents.z,
    center.x - halfExtents.x, center.y - halfExtents.y,
    center.z + halfExtents.z,
    center.x - halfExtents.x, center.y + halfExtents.y,
    center.z + halfExtents.z,
    center.x - halfExtents.x, center.y + halfExtents.y,
    center.z - halfExtents.z,
  ]);

  final _normals = normals
      ? Float32List.fromList([
          // Front face
          0, 0, 1,
          0, 0, 1,
          0, 0, 1,
          0, 0, 1,

          // Back face
          0, 0, -1,
          0, 0, -1,
          0, 0, -1,
          0, 0, -1,

          // Top face
          0, 1, 0,
          0, 1, 0,
          0, 1, 0,
          0, 1, 0,

          // Bottom face
          0, -1, 0,
          0, -1, 0,
          0, -1, 0,
          0, -1, 0,

          // Right face
          1, 0, 0,
          1, 0, 0,
          1, 0, 0,
          1, 0, 0,

          // Left face
          -1, 0, 0,
          -1, 0, 0,
          -1, 0, 0,
          -1, 0, 0,
        ])
      : null;

  final _uvs = uvs
      ? Float32List.fromList([
          // Front face
          1 / 3, 1 / 3,
          2 / 3, 1 / 3,
          2 / 3, 2 / 3,
          1 / 3, 2 / 3,

          // Back face
          2 / 3, 2 / 3,
          2 / 3, 1,
          1, 1,
          1, 2 / 3,

          // Top face
          1 / 3, 0,
          1 / 3, 1 / 3,
          2 / 3, 1 / 3,
          2 / 3, 0,

          // Bottom face
          1 / 3, 2 / 3,
          2 / 3, 2 / 3,
          2 / 3, 1,
          1 / 3, 1,

          // Right face
          2 / 3, 1 / 3,
          2 / 3, 2 / 3,
          1, 2 / 3,
          1, 1 / 3,

          // Left face
          0, 1 / 3,
          1 / 3, 1 / 3,
          1 / 3, 2 / 3,
          0, 2 / 3,
        ])
      : null;

  final indices = Uint16List.fromList([
    // Front face
    0, 1, 2, 0, 2, 3,
    // Back face
    4, 5, 6, 4, 6, 7,
    // Top face
    8, 9, 10, 8, 10, 11,
    // Bottom face
    12, 13, 14, 12, 14, 15,
    // Right face
    16, 17, 18, 16, 18, 19,
    // Left face
    20, 21, 22, 20, 22, 23
  ]);

  return Geometry(vertices, indices, normals: _normals, uvs: _uvs);
}