<!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>texture_clickPageChange</title> </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 controls; let counter = 0; let moveForward = false; let moveBackward = false; let moveLeft = false; let moveRight = false; let moveUp = false; let moveDown = false; 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 light = new THREE.SpotLight(0xffffff, 1.0); light.position.set(100, 50, 50); scene.add(light); light.castShadow = true; console.log(light); // 補助 const axesHelper = new THREE.AxesHelper(500); //x:red y:green z:blue scene.add(axesHelper); const gridHelper = new THREE.GridHelper(1, 1); scene.add(gridHelper); const lightHelper = new THREE.DirectionalLightHelper(light, 10); 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 "j": moveUp = true; break; case "k": 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 "j": moveUp = false; break; case "k": moveDown = false; break; } }); // レンダラーの作成 renderer = new THREE.WebGLRenderer({ alpha: true, antialias: true, }); renderer.setSize(window.innerWidth, window.innerHeight); renderer.physicallyCorrectLight = true; // cubeTextureLoader let resumePath = [ '../texture_photo/image-1.png', '../texture_photo/image-2.png', '../texture_photo/image-3.png', '../texture_photo/image-4.png' ]; console.log(resumePath.length); let count = page(counter, resumePath.length); console.log(counter); const geometry = new THREE.BoxGeometry(25, 25 * Math.sqrt(2), 0); const loadPhoto = new THREE.TextureLoader().load('../texture_photo/image-1.png'); let material = new THREE.MeshBasicMaterial({ map: loadPhoto }); const mesh = new THREE.Mesh(geometry, material); mesh.name = "resume"; scene.add(mesh); document .getElementById("WebGL-output") .appendChild(renderer.domElement); } function animate() { requestAnimationFrame(animate); updateCameraPosition(); renderer.render(scene, camera); } function updateCameraPosition() { const speed = 10; // 移動速度 const direction = new THREE.Vector3(); const { x, y, z } = controls.getObject().position; direction.x = Number(moveRight) - Number(moveLeft); direction.y = Number(moveUp) - Number(moveDown); direction.z = Number(moveForward) - Number(moveBackward); direction.normalize(); const delta = speed * 0.1; // 移動距離 controls.moveRight(direction.x * delta); controls.getObject().position.y += direction.y * delta; controls.moveForward(direction.z * delta); // console.log(controls.getObject()); } //作成関数はクリックしたらカウントされて、ページ数だけ割る。 //例えば4pなら、配列.length % 4 にする。 結果が0のときは1pが表示される。 function page(countclick, pageNum) { let locPage = countclick % pageNum; } document.addEventListener("click", OnClick); const mouse = new THREE.Vector2(); // クリックしたら呼ばれる function OnClick(event) { event.preventDefault(); const raycaster = new THREE.Raycaster(); const mouse = new THREE.Vector2(); // マウスポインタの位置情報の取得 mouse.x = 0; mouse.y = 0; // 光線を発射 raycaster.setFromCamera(mouse, camera); // 光線と交わるオブジェクトを収集 const intersects = raycaster.intersectObjects(scene.children, true); // 交わるオブジェクトが1個以上の場合 if (intersects.length > 0) { if (intersects[0].object.name == "resume") { counter += 1; // console.log(counter); } // console.log(intersects[0]); } } // 関数の実行 init(); animate(); </script> </body> </html>