<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> body { margin: 0; overflow: hidden; } </style> </head> <body> <div id="WebGL-output"> <div class="point"></div> </div> <script type="module"> import * as THREE from "https://unpkg.com/three@0.126.1/build/three.module.js"; import { PointerLockControls } from "https://unpkg.com/three@0.126.1/examples/jsm/controls/PointerLockControls.js"; let camera; let scene; let renderer; let moveForward = false; let moveBackward = false; let moveLeft = false; let moveRight = false; let moveUp = false; let moveDown = false; let controls; function init() { //シーンの作成 scene = new THREE.Scene(); scene.background = new THREE.Color(0x111111); // 背景色 //カメラの作成 camera = new THREE.PerspectiveCamera( 45, window.innerWidth / window.innerHeight, 0.1, 1000 ); //カメラセット camera.position.set(10, 50, 50); // カメラの位置 camera.lookAt(new THREE.Vector3(0, 5, 0)); // // 補助線 // const axesHelper = new THREE.AxesHelper(500); // scene.add(axesHelper); // const gridHelper = new THREE.GridHelper(1, 1); // scene.add(gridHelper); // const lightHelper = new THREE.SpotLightHelper(light); // scene.add(lightHelper); // カメラコントロールの作成 controls = new PointerLockControls(camera, document.body); document.addEventListener("click", function () { controls.lock(); // fAudio(); }); // controls.addEventListener("lock", function () { }); // controls.addEventListener("unlock", function () { }); // キーボードのキーを押したの際の処理 document.addEventListener("keydown", function (event) { switch (event.key) { case "w": case "ArrowUp": moveForward = true; break; case "s": case "ArrowDown": moveBackward = true; break; case "a": case "ArrowLeft": moveLeft = true; break; case "d": case "ArrowRight": moveRight = true; break; case "e": moveUp = true; break; case "q": moveDown = true; break; } }); // キーボードのキーを離した際の処理 document.addEventListener("keyup", function (event) { switch (event.key) { case "w": case "ArrowUp": moveForward = false; break; case "s": case "ArrowDown": moveBackward = false; break; case "a": case "ArrowLeft": moveLeft = false; break; case "d": case "ArrowRight": moveRight = false; break; case "e": moveUp = false; break; case "q": moveDown = false; break; } }); // レンダラーの作成 renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true, }); renderer.setSize(window.innerWidth, window.innerHeight); renderer.shadowMap.enabled = true; renderer.shadowMap.type = THREE.PCFSoftShadowMap; // cubeTextureLoader const geometry = new THREE.BoxGeometry(25, 25 * Math.sqrt(2), 0.1); const loadPhoto = new THREE.TextureLoader().load( "../texture_photo/resumeP1.png" // "../../resume/figure/threeJsSystem_ja.pdf" ); let material = new THREE.MeshBasicMaterial({ map: loadPhoto, }); const mesh = new THREE.Mesh(geometry, material); mesh.castShadow = true; scene.add(mesh); // オブジェクトの追加 const geometry1 = new THREE.BoxGeometry(1000, 1, 1000); const material1 = new THREE.MeshStandardMaterial({ color: 0x734e30 }); const mesh1 = new THREE.Mesh(geometry1, material1); mesh1.position.set(0, -25, 0); mesh1.receiveShadow = true; // 影を受け付ける scene.add(mesh1); const SpotlLight = new THREE.SpotLight(0xffffff, 2); SpotlLight.position.set(100, 100, 100); SpotlLight.castShadow = true; // 影を生成する scene.add(SpotlLight); SpotlLight.shadow.mapSize.width = 2048; SpotlLight.shadow.mapSize.height = 2048; document .getElementById("WebGL-output") .appendChild(renderer.domElement); } function animate() { requestAnimationFrame(animate); updateCameraPosition(); renderer.render(scene, camera); } function updateCameraPosition() { const speed = 1; // 移動速度 //.moveForward(Number) で前、.moveRightで右に if (moveForward) controls.moveForward(speed); if (moveBackward) controls.moveForward(-speed); if (moveRight) controls.moveRight(speed); if (moveLeft) controls.moveRight(-speed); //getObject()で直接カメラの操作 //controls.getObject()の時点でカメラのプロパティに切り替わる if (moveUp) controls.getObject().position.y += speed; if (moveDown) controls.getObject().position.y -= speed; } // 関数の実行 init(); animate(); </script> </body> </html>