flatAttribute static method
BufferAttribute<NativeArray<num> >
flatAttribute(
- BufferAttribute<
NativeArray< attribute,num> > - int vertexCount, [
- 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);
}