Newer
Older
reroad-test / 2020-ryusei / aframe-master / src / components / camera.js
@ryusei ryusei on 22 Oct 2020 2 KB パノラマ表示
var registerComponent = require('../core/component').registerComponent;
var THREE = require('../lib/three');

/**
 * Camera component.
 * Pairs along with camera system to handle tracking the active camera.
 */
module.exports.Component = registerComponent('camera', {
  schema: {
    active: {default: true},
    far: {default: 10000},
    fov: {default: 80, min: 0},
    near: {default: 0.005, min: 0},
    spectator: {default: false},
    zoom: {default: 1, min: 0}
  },

  /**
   * Initialize three.js camera and add it to the entity.
   * Add reference from scene to this entity as the camera.
   */
  init: function () {
    var camera;
    var el = this.el;

    // Create camera.
    camera = this.camera = new THREE.PerspectiveCamera();
    el.setObject3D('camera', camera);
  },

  /**
   * Update three.js camera.
   */
  update: function (oldData) {
    var data = this.data;
    var camera = this.camera;

    // Update properties.
    camera.aspect = data.aspect || (window.innerWidth / window.innerHeight);
    camera.far = data.far;
    camera.fov = data.fov;
    camera.near = data.near;
    camera.zoom = data.zoom;
    camera.updateProjectionMatrix();

    this.updateActiveCamera(oldData);
    this.updateSpectatorCamera(oldData);
  },

  updateActiveCamera: function (oldData) {
    var data = this.data;
    var el = this.el;
    var system = this.system;
    // Active property did not change.
    if (oldData && oldData.active === data.active || data.spectator) { return; }

    // If `active` property changes, or first update, handle active camera with system.
    if (data.active && system.activeCameraEl !== el) {
      // Camera enabled. Set camera to this camera.
      system.setActiveCamera(el);
    } else if (!data.active && system.activeCameraEl === el) {
      // Camera disabled. Set camera to another camera.
      system.disableActiveCamera();
    }
  },

  updateSpectatorCamera: function (oldData) {
    var data = this.data;
    var el = this.el;
    var system = this.system;
    // spectator property did not change.
    if (oldData && oldData.spectator === data.spectator) { return; }

    // If `spectator` property changes, or first update, handle spectator camera with system.
    if (data.spectator && system.spectatorCameraEl !== el) {
      // Camera enabled. Set camera to this camera.
      system.setSpectatorCamera(el);
    } else if (!data.spectator && system.spectatorCameraEl === el) {
      // Camera disabled. Set camera to another camera.
      system.disableSpectatorCamera();
    }
  },

  /**
   * Remove camera on remove (callback).
   */
  remove: function () {
    this.el.removeObject3D('camera');
  }
});