GLTFMaterialsSpecularExtension constructor

GLTFMaterialsSpecularExtension(
  1. GLTFParser parser
)

Implementation

GLTFMaterialsSpecularExtension(this.parser) {
  name = gltfExtensions["KHR_MATERIALS_SPECULAR"]!;

  getMaterialType = (materialIndex) {
    final parser = this.parser;
    final materialDef = parser.json["materials"][materialIndex];

    if (materialDef["extensions"] == null ||
        materialDef["extensions"][name] == null) return null;

    return MeshPhysicalMaterial;
  };

  extendMaterialParams = (int materialIndex, Map<String, dynamic> materialParams) async {
    final parser = this.parser;
    final materialDef = parser.json["materials"][materialIndex];

    if (materialDef["extensions"] == null ||
        materialDef["extensions"][name] == null) {
      return null;
    }

    List<Future<Texture?>> pending = [];

    final extension = materialDef["extensions"][name];

    materialParams['specularIntensity'] = extension['specularFactor'] ?? 1.0;

    if (extension['specularTexture'] != null) {
      pending.add(
        parser.assignTexture(materialParams, 'specularIntensityMap', extension['specularTexture'])
      );
    }

    final colorArray = extension['specularColorFactor'] ?? <double>[1.0, 1.0, 1.0];
    materialParams['specularColor'] = Color().setRGB(colorArray[0].toDouble(), colorArray[1].toDouble(), colorArray[2].toDouble());

    if (extension['specularColorTexture'] != null) {
      final texture = parser.assignTexture(materialParams, 'specularColorMap', extension['specularColorTexture'], SRGBColorSpace);
      pending.add(texture);
    }

    return await Future.wait(pending);
  };
}