[Three.js] 平面ジオメトリに画像をテクスチャとして貼り付ける(複数版)

前回のものを複数ジオメトリにしただけ。
次への途中段階に過ぎませんが・・・

import * as THREE from "three";

import { PhotoPlane } from "./Mesh/PhotoPlane";


(function(window, document) {

	class Common {

		/**
		 * メイン
		 * @constructor
		 */
		constructor() {

			this.scene = null;
			this.camera = null;
			this.renderer = null;

			this.planes = [];

			this.textures = [
				'./images/texture01.jpg',
				'./images/texture02.jpg',
				'./images/texture03.jpg'
			];

			this.init();

		}



		/**
		 * 初期化
		 */
		init = () => {

			// シーンの生成
			this.scene = new THREE.Scene();

			// カメラ
			this.camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

			// レンダラーの生成と追加(要するにcanvas要素である)
			this.renderer = new THREE.WebGLRenderer();
			this.renderer.setSize( window.innerWidth, window.innerHeight );
			document.body.appendChild( this.renderer.domElement );

			// ライトの追加(環境光)
			const light = new THREE.AmbientLight(0xFFFFFF, 1.0);
			this.scene.add(light);

			// ライトの追加(特定方向に照射される光源)
			const directLight = new THREE.DirectionalLight(0xFFFFFF, 1);
			this.scene.add(directLight);

			for(let i = 0; i < 3; i++) {
				const plane = new PhotoPlane(this.textures[i]);
				this.scene.add(plane);
				plane.position.y = i * 9 - 9;

				this.planes.push(plane);
			}

			this.camera.position.z = 20;

			this.animate();

		}


		animate = () => {

			requestAnimationFrame( this.animate );

			this.renderer.render( this.scene, this.camera );

		}

	}




	new Common();

})(window, document);

次回からのことも考慮して、使いやすくするためにTHREE.Meshを継承したPhotoPlaneクラスを用意。

import * as THREE from "three";



/**
 * 画像テクスチャ平面メッシュ
 * @class
 */

export class PhotoPlane extends THREE.Mesh {

	/**
	 *
	 * @constructor
	 */
	constructor(url) {

		const geometry = new THREE.PlaneGeometry(16, 9);

		const loader = new THREE.TextureLoader();
		const texture = loader.load(url);

		const material = new THREE.MeshBasicMaterial( { map:texture } );

		super(geometry, material);

		// this.textures = url;

	}

}

デモはこちら