3D基本セット全部入り

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Three.js</title>
		<style>
			body {
				margin: 0;
				padding: 0;
				overflow: hidden;
			}
		</style>
	</head>
	<body>
		<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r132/three.min.js"></script>
		<script>
			// グローバル設定
			
			
			//fov:視野角。デフォルト値は 50。
			//aspect:カメラのアスペクト比(画面の横幅と縦幅の比)。デフォルト値は 1。
			//near:描画する最小距離。デフォルト値は 0.1。
			//far:描画する最大距離。デフォルト値は 2000。
			const CAMERA_POSITION = { x: 0, y: 0, z: 5 };
			const CAMERA_LOOKAT = { x: 0, y: 0, z: 0 };
			const CAMERA_FOV = 45;
			const CAMERA_ASPECT_RATIO = window.innerWidth / window.innerHeight;
			const CAMERA_NEAR = 0.1;
			const CAMERA_FAR = 1000;
			
			const BG_COLOR = 0xffffff;

			function init() {
				// シーンを作成
				const scene = new THREE.Scene();

				// カメラを作成
				const camera = new THREE.PerspectiveCamera(
					CAMERA_FOV, CAMERA_ASPECT_RATIO, CAMERA_NEAR, CAMERA_FAR);
				camera.position.set(CAMERA_POSITION.x, CAMERA_POSITION.y, CAMERA_POSITION.z);
				camera.lookAt(CAMERA_LOOKAT.x, CAMERA_LOOKAT.y, CAMERA_LOOKAT.z);
				
				//camera.position:カメラの位置を指定するためのVector3オブジェクト
				//camera.rotation:カメラの回転を指定するためのEuler角またはQuaternionオブジェクト
				//camera.up:カメラの上方向を指定するためのVector3オブジェクト
				//camera.fov:カメラの視野角(field of view)
				//camera.aspect:カメラのアスペクト比
				//camera.near:カメラの手前のクリップ面
				//camera.far:カメラの奥のクリップ面
				
				
				// レンダラーを作成します
				const renderer = new THREE.WebGLRenderer({
					// キャンバスの透過を有効にする
					alpha: true,
					// デバイスピクセル比の調整を行う
					pixelRatio: window.devicePixelRatio,
					// ステンシルバッファを有効にする
					stencil: false,
					// アンチエイリアシングを有効にする
					antialias: true,
					// カラースペースを設定する
					// 'auto': ブラウザが自動で選択
					// 'sRGB': sRGBカラースペース
					// 'linear': リニアカラースペース
					// その他に 'RGB' も指定可能
					// 詳しくは公式ドキュメントを参照: https://threejs.org/docs/#api/en/renderers/WebGLRenderer.outputEncoding
					outputEncoding: THREE.sRGBEncoding,
					// フレームバッファオブジェクトを自動的にクリアする
					autoClear: true,
					// canvas 要素が WebGL コンテキストを失ったときにレンダラーを自動的に消去する
					autoDispose: true,
					// 頂点データをダイナミックに更新するかどうか
					// true にすると、頂点バッファオブジェクトを更新する際に、毎回 GPU にデータを転送する
					// false にすると、GPU にデータを一度転送した後、更新する際にはメモリ上でデータを保持する
					// ダイナミックな更新を頻繁に行う場合は true にするとパフォーマンスが向上する
					// 一方、頂点データの更新頻度が低い場合は false にするとメモリの節約になる
					// 詳しくは公式ドキュメントを参照: https://threejs.org/docs/#api/en/core/BufferAttribute.dynamic
					attributes: {
						dynamic: true,
					},
					// インスタンス描画をサポートするかどうか
					// 詳しくは公式ドキュメントを参照: https://threejs.org/docs/#api/en/core/InstancedBufferGeometry
					instancing: true,
					// WebGL のドライバがサポートするかどうかにかかわらず、3D テクスチャを有効にする
					// 詳しくは公式ドキュメントを参照: https://threejs.org/docs/#api/en/loaders/TextureLoader
					texture3D: true,
				});
				renderer.setSize(window.innerWidth, window.innerHeight);
				renderer.setClearColor(BG_COLOR);
				document.body.appendChild(renderer.domElement);
				
				//renderer.gammaFactor: 色の補正係数(既定値は2.0)
				//renderer.gammaOutput: 色空間のガンマ値(既定値はtrue)
				//renderer.gammaInput: 入力のガンマ値(既定値はtrue)
				//renderer.renderer.physicallyCorrectLights: 物理ベースのレンダリングを行うかどうかを指定する(既定値はfalse)
				//renderer.shadowMap: シャドウマップの設定を管理するオブジェクト
				//renderer.toneMapping: トーンマッピングのアルゴリズムを指定する(既定値はThree.LinearToneMapping)
				//renderer.toneMappingExposure: トーンマッピングの露光値を指定する(既定値は1.0)
				//renderer.toneMappingWhitePoint: トーンマッピングの白色点を指定する(既定値は1.0)
				
				
				// ライトを作成
				//AmbientLight(環境光)
				//シーン全体に均等に光を当てます。色を指定する引数の他、明るさを指定する引数があります
				const ambientLight = new THREE.AmbientLight(color, intensity);
				scene.add(ambientLight);

				//DirectionalLight(平行光源)
				//平行に光を当てる光源です。位置を指定する必要がなく、方向と色を指定する引数があります。影を作る場合は shadow プロパティを true に設定し、影の解像度や範囲を調整する必要があります。
				const directionalLight = new THREE.DirectionalLight(color, intensity);
				directionalLight.position.set(x, y, z); // 光の向きを指定することもできる
				directionalLight.castShadow = true; // 影を有効にする
				directionalLight.shadow.mapSize.width = 1024; // 影の解像度(横幅)
				directionalLight.shadow.mapSize.height = 1024; // 影の解像度(縦幅)
				directionalLight.shadow.camera.near = 0.1; // 影を発生させる最小距離
				directionalLight.shadow.camera.far = 500; // 影を発生させる最大距離
				directionalLight.shadow.bias = -0.005; // シャドウマッピングのバイアス
				scene.add(directionalLight);

				//PointLight(点光源)
				//点から放射状に光を当てる光源です。位置を指定する必要があります。色と明るさを指定する引数があります。影を作る場合は shadow プロパティを true に設定し、影の解像度や範囲を調整する必要があります。
				const pointLight = new THREE.PointLight(color, intensity, distance, decay);
				pointLight.position.set(x, y, z);
				pointLight.castShadow = true; // 影を有効にする
				pointLight.shadow.mapSize.width = 1024; // 影の解像度(横幅)
				light.shadow.mapSize.height = 1024; // 影の解像度(縦幅)
				pointLight.shadow.camera.near = 0.1; // 影を発生させる最小距離
				pointLight.shadow.camera.far = 500; // 影を発生させる最大距離
				pointLight.shadow.bias = -0.005; // シャドウマッピングのバイアス
				scene.add(pointLight);

				//SpotLight(スポットライト)
				//ある方向から照射される円錐形の光源です。位置と方向を指定する必要があります。色と明るさを指定する引数があります。角度や範囲を指定する引数があります。影を作る場合は shadow プロパティを true に設定し、影の解像度や範囲、影の強さなどを調整する必要があります。
				const light = new THREE.SpotLight(color, intensity, distance, angle, penumbra, decay);
				light.position.set(x, y, z);
				light.target.position.set(targetX, targetY, targetZ);
				light.castShadow = true; // 影を有効にする
				light.shadow.mapSize.width = 1024; // 影の解像度(横幅)
				light.shadow.mapSize.height = 1024; // 影の解像度(縦幅)
				light.shadow.camera.near = 0.1; // 影を発生させる最小距離
				light.shadow.camera.far = 500; // 影を発生させる最大距離
				light.shadow.bias = -0.005; // シャドウマッピングのバイアス

				// オブジェクトを作成
				const geometry = new THREE.BoxGeometry();
				const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
				const cube = new THREE.Mesh(geometry, material);
				scene.add(cube);

				// アニメーション
				function animate() {
					requestAnimationFrame(animate);

					cube.rotation.x += 0.01;
					cube.rotation.y += 0.01;

					renderer.render(scene, camera);
				}

				animate();
			}

			init();
		</script>
	</body>
</html>

この記事が気に入ったらサポートをしてみませんか?