renderFace3 method

void renderFace3(
  1. dynamic v1,
  2. dynamic v2,
  3. dynamic v3,
  4. dynamic element,
  5. Material material,
)

Implementation

void renderFace3(
    RenderableVertex v1, RenderableVertex v2, RenderableVertex v3, RenderableFace element, Material material) {
  info.vertices += 3;
  info.faces++;
  String path = 'M${convert(v1.positionScreen.x)},'
      '${convert(v1.positionScreen.y)}L'
      '${convert(v2.positionScreen.x)},'
      '${convert(v2.positionScreen.y)}L'
      '${convert(v3.positionScreen.x)},'
      '${convert(v3.positionScreen.y)}z';
  String style = '';

  if (material is MeshBasicMaterial) {
    _color.copy(material.color);
    if (material.vertexColors) {
      _color.multiply(element.color);
    }
  } else if (material is MeshLambertMaterial || material is MeshPhongMaterial || material is MeshStandardMaterial) {
    _diffuseColor.copy(material.color);

    if (material.vertexColors) {
      _diffuseColor.multiply(element.color);
    }

    _color.copy(_ambientLight);
    _centroid.copy(v1.positionWorld).add(v2.positionWorld).add(v3.positionWorld).divideScalar(3);
    calculateLight(lights!, _centroid, element.normalModel, _color);
    _color.multiply(_diffuseColor).add(material.emissive!);
  } else if (material is MeshNormalMaterial) {
    _normal.copy(element.normalModel).applyMatrix3(_normalViewMatrix).normalize();
    _color.setRGB(_normal.x, _normal.y, _normal.z).multiplyScalar(0.5).addScalar(0.5);
  }

  String colorStyle = _color.getStyle();

  if (material.wireframe) {
    style =
        'fill:none;stroke:$colorStyle;stroke-opacity:${material.opacity};stroke-width:${material.wireframeLinewidth};stroke-linecap:${material.wireframeLinecap};stroke-linejoin:${material.wireframeLinejoin}';
  } else {
    style = 'fill:$colorStyle;fill-opacity:${material.opacity}';
  }
  addPath(style, path);
}