flatAttribute static method

BufferAttribute<NativeArray<num>> flatAttribute(
  1. BufferAttribute<NativeArray<num>> attribute,
  2. int vertexCount, [
  3. LoopParameters? params
])

Implementation

static BufferAttribute flatAttribute(BufferAttribute attribute, int vertexCount, [LoopParameters? params]) {
  params ??= LoopParameters();
  const newTriangles = 4;
  final arrayLength = (vertexCount * attribute.itemSize) * newTriangles;
  final List<double> floatArray = List.filled(arrayLength, 0.0);

  int index = 0;
  int step = attribute.itemSize;

  for (int i = 0; i < vertexCount; i += 3) {
    // Original Vertices
    _vector0.fromBuffer(attribute, i + 0);
    _vector1.fromBuffer(attribute, i + 1);
    _vector2.fromBuffer(attribute, i + 2);

    // Midpoints
    _vec0to1.setFrom(_vector0).add(_vector1).divideScalar(2.0);
    _vec1to2.setFrom(_vector1).add(_vector2).divideScalar(2.0);
    _vec2to0.setFrom(_vector2).add(_vector0).divideScalar(2.0);

    // Add New Triangle Positions
    setTriangle(floatArray, index, step, _vector0, _vec0to1, _vec2to0);
    index += (step * 3);
    setTriangle(floatArray, index, step, _vector1, _vec1to2, _vec0to1);
    index += (step * 3);
    setTriangle(floatArray, index, step, _vector2, _vec2to0, _vec1to2);
    index += (step * 3);
    setTriangle(floatArray, index, step, _vec0to1, _vec1to2, _vec2to0);
    index += (step * 3);
  }

  return Float32BufferAttribute.fromList(floatArray, attribute.itemSize);
}