calculateVertexNormals static method

List<Vector3> calculateVertexNormals(
  1. List<Vector3> vertices,
  2. List<int> indices
)

Implementation

static List<Vector3> calculateVertexNormals(
  List<Vector3> vertices,
  List<int> indices,
) {
  final normals = List.filled(vertices.length, Vector3.zero());
  for (var i = 0; i < indices.length; i += 3) {
    final i0 = indices[i];
    final i1 = indices[i + 1];
    final i2 = indices[i + 2];

    final v0 = vertices[i0];
    final v1 = vertices[i1];
    final v2 = vertices[i2];

    final edge1 = v1 - v0;
    final edge2 = v2 - v0;
    final faceNormal = edge1.cross(edge2)..normalize();

    normals[i0] += faceNormal;
    normals[i1] += faceNormal;
    normals[i2] += faceNormal;
  }
  for (final normal in normals) {
    normal.normalize();
  }
  return normals;
}