renderObject method

void renderObject(
  1. Object3D object,
  2. Camera camera,
  3. Camera shadowCamera,
  4. Light light,
  5. int type,
)

Implementation

void renderObject(Object3D object, Camera camera, Camera shadowCamera, Light light, int type) {
  if (object.visible == false) return;

  final visible = object.layers.test(camera.layers);

  if (visible && (object is Mesh || object is Line || object is Points)) {
    if ((object.castShadow || (object.receiveShadow && type == VSMShadowMap)) &&
        (!object.frustumCulled || _frustum.intersectsObject(object))) {
      object.modelViewMatrix.multiply2(shadowCamera.matrixWorldInverse, object.matrixWorld);

      final geometry = _objects.update(object);
      final material = object.material;

      if (material is GroupMaterial) {
        final groups = geometry.groups;

        for (int k = 0, kl = groups.length; k < kl; k++) {
          final group = groups[k];
          final groupMaterial = material.children[group["materialIndex"]];

          if (groupMaterial.visible) {//groupMaterial != null &&
            final depthMaterial = getDepthMaterial(object, groupMaterial, light, shadowCamera.near, shadowCamera.far, type);
            object.onBeforeShadow(renderer: _renderer, scene: object, camera: camera, shadowCamera: shadowCamera, geometry: geometry, material: depthMaterial, group: group);
            _renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, group);
            object.onAfterShadow(renderer: _renderer, scene: object, camera: camera, shadowCamera: shadowCamera, geometry: geometry, material: depthMaterial, group: group);
          }
        }
      }
      else if (material != null && material.visible) {
        final depthMaterial = getDepthMaterial(object, material, light, shadowCamera.near, shadowCamera.far, type);
        object.onBeforeShadow(renderer: _renderer, scene: object, camera: camera, shadowCamera: shadowCamera, geometry: geometry, material: depthMaterial);
        _renderer.renderBufferDirect(shadowCamera, null, geometry, depthMaterial, object, null);
        object.onAfterShadow(renderer: _renderer, scene: object, camera: camera, shadowCamera: shadowCamera, geometry: geometry, material: depthMaterial);
      }
    }
  }

  final children = object.children;

  for (int i = 0, l = children.length; i < l; i++) {
    renderObject(children[i], camera, shadowCamera, light, type);
  }
}