toFlameVertices method

(List<Vertex>, List<int>) toFlameVertices(
  1. JointData jointData,
  2. Matrix4 transform
)

Implementation

(List<flame_3d.Vertex>, List<int>) toFlameVertices(
  JointData jointData,
  Matrix4 transform,
) {
  assert(mode == PrimitiveMode.triangles);

  final positions = this.positions!.get().typedData();
  final indices = this.indices?.get().typedData() ??
      // for non-indexed geometries
      List.generate(positions.length, (i) => i);
  final texCoords = this.texCoords?.get().typedData();
  final normals = this.normals?.get().typedData() ??
      flame_3d.Vertex.calculateVertexNormals(positions, indices);

  Vector3? process(Vector3? v) {
    if (v == null) {
      return null;
    }
    return transform.transform3(v.clone());
  }

  final maxIndex = indices.reduce(max);
  final vertices = <flame_3d.Vertex>[];
  for (var i = 0; i <= maxIndex; i++) {
    vertices.add(
      flame_3d.Vertex(
        position: process(positions[i])!,
        texCoord: texCoords?.elementAtOrNull(i) ?? Vector2.zero(),
        normal: process(normals.elementAtOrNull(i)),
        joints: jointData.localizedJoint(i),
        weights: jointData.weight(i),
      ),
    );
  }

  return (vertices, indices);
}