cube static method

Geometry cube({
  1. bool normals = true,
  2. bool uvs = true,
  3. bool flipUvs = true,
})

Implementation

static Geometry cube(
    {bool normals = true, bool uvs = true, bool flipUvs = true}) {
  final vertices = Float32List.fromList([
    // Front face
    -1, -1, 1, // 0
    1, -1, 1, // 1
    1, 1, 1, // 2
    -1, 1, 1, // 3

    // Back face
    -1, -1, -1, // 4
    1, -1, -1, // 5
    1, 1, -1, // 6
    -1, 1, -1, // 7

    // Top face
    -1, 1, 1, // 3 (8)
    1, 1, 1, //2 (9)
    1, 1, -1, //6 (10)
    -1, 1, -1, // 7 (11)

    // Bottom
    -1, -1, -1, // 4 (12)
    1, -1, -1, // 5 (13)
    1, -1, 1, // 1 (14)
    -1, -1, 1, // 0 (15)

    // Right
    1, -1, 1, // 1 (16)
    1, -1, -1, // 5 (17)
    1, 1, -1, // 6 (18)
    1, 1, 1, // 2 (19)

    // Left
    -1, -1, -1, // 4 (20)
    -1, -1, 1, // 0 (21)
    -1, 1, 1, // 3 (22)
    -1, 1, -1 // 7 (23)
  ]);

  final _normals = normals
      ? Float32List.fromList([
          0,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          0,
          -1,
          0,
          0,
        ])
      : null;

  // Original UV coordinates
  var originalUvs = <double>[
    // front
    1 / 3, 3 / 4, // 0
    2 / 3, 3 / 4, // 1
    2 / 3, 1, // 2
    1 / 3, 1, // 3

    // back
    1 / 3, 1 / 4, // 4
    2 / 3, 1 / 4, // 5
    2 / 3, 1 / 2, // 6
    1 / 3, 1 / 2, // 7

    // top
    2 / 3, 1 / 2, // 8
    1, 1 / 2, // 9
    1, 3 / 4, // 10
    2 / 3, 3 / 4, // 11

    // bottom
    0, 1 / 2, // 12
    1 / 3, 1 / 2, // 13
    1 / 3, 3 / 4, // 14
    0, 3 / 4, // 15

    // right
    1 / 3, 1 / 2, // 16
    2 / 3, 1 / 2, // 17
    2 / 3, 3 / 4, // 18
    1 / 3, 3 / 4, // 19

    // left
    1 / 3, 0, // 20
    2 / 3, 0, // 21
    2 / 3, 1 / 4, // 22
    1 / 3, 1 / 4 // 23
  ];

  // Apply UV flipping if requested
  final _uvs = uvs
      ? Float32List.fromList(
          flipUvs ? _flipUvCoordinates(originalUvs) : originalUvs)
      : null;

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

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