(function (global, factory) {
  if (typeof define === "function" && define.amd) {
    define(["exports", "three"], factory);
  } else if (typeof exports !== "undefined") {
    factory(exports, require("three"));
  } else {
    var mod = {
      exports: {}
    };
    factory(mod.exports, global.three);
    global.scene = mod.exports;
  }
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (_exports, THREE) {
  "use strict";

  Object.defineProperty(_exports, "__esModule", {
    value: true
  });
  _exports.default = void 0;
  THREE = _interopRequireWildcard(THREE);

  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }

  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }

  var camera, scene, renderer, group;

  function init(canvas, width, height, pixelRatio, path) {
    camera = new THREE.PerspectiveCamera(40, width / height, 1, 1000);
    camera.position.z = 200;
    scene = new THREE.Scene();
    scene.fog = new THREE.Fog(0x444466, 100, 400);
    scene.background = new THREE.Color(0x444466);
    group = new THREE.Group();
    scene.add(group); // we don't use ImageLoader since it has a DOM dependency (HTML5 image element)

    var loader = new THREE.ImageBitmapLoader().setPath(path);
    loader.setOptions({
      imageOrientation: 'flipY'
    });
    loader.load('textures/matcaps/matcap-porcelain-white.jpg', function (imageBitmap) {
      var texture = new THREE.CanvasTexture(imageBitmap);
      var geometry = new THREE.IcosahedronGeometry(5, 8);
      var materials = [new THREE.MeshMatcapMaterial({
        color: 0xaa24df,
        matcap: texture
      }), new THREE.MeshMatcapMaterial({
        color: 0x605d90,
        matcap: texture
      }), new THREE.MeshMatcapMaterial({
        color: 0xe04a3f,
        matcap: texture
      }), new THREE.MeshMatcapMaterial({
        color: 0xe30456,
        matcap: texture
      })];

      for (var i = 0; i < 100; i++) {
        var material = materials[i % materials.length];
        var mesh = new THREE.Mesh(geometry, material);
        mesh.position.x = random() * 200 - 100;
        mesh.position.y = random() * 200 - 100;
        mesh.position.z = random() * 200 - 100;
        mesh.scale.setScalar(random() + 1);
        group.add(mesh);
      }

      renderer = new THREE.WebGLRenderer({
        antialias: true,
        canvas: canvas
      });
      renderer.setPixelRatio(pixelRatio);
      renderer.setSize(width, height, false);
      animate();
    });
  }

  function animate() {
    // group.rotation.x = Date.now() / 4000;
    group.rotation.y = -Date.now() / 4000;
    renderer.render(scene, camera);

    if (self.requestAnimationFrame) {
      self.requestAnimationFrame(animate);
    } else {// Firefox
    }
  } // PRNG


  var seed = 1;

  function random() {
    var x = Math.sin(seed++) * 10000;
    return x - Math.floor(x);
  }

  var _default = init;
  _exports.default = _default;
});