merge static method

ModelGeometry? merge(
  1. List<ModelGeometry> parts
)

parts as one geometry; null when there are none.

Implementation

static ModelGeometry? merge(List<ModelGeometry> parts) {
  if (parts.isEmpty) return null;
  if (parts.length == 1) return parts.single;
  final positions = Float32List(
    parts.fold(0, (n, p) => n + p.positions.length),
  );
  final indices = Uint32List(parts.fold(0, (n, p) => n + p.indices.length));
  var vertexBase = 0, p = 0, i = 0;
  for (final part in parts) {
    positions.setAll(p, part.positions);
    for (final index in part.indices) {
      indices[i++] = index + vertexBase;
    }
    p += part.positions.length;
    vertexBase += part.positions.length ~/ 3;
  }
  return ModelGeometry(positions, indices);
}