Newer
Older
2024-Tsubasa / system / test / cubeTexture_test.html
@tsubasa tsubasa on 1 Dec 2023 5 KB add
<!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>
  </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";
      import { CubeTextureLoader } from "https://unpkg.com/three@0.126.1/build/three.module.js";

      let camera;
      let scene;
      let renderer;
      let moveForward = false;
      let moveBackward = false;
      let moveLeft = false;
      let moveRight = 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 light = new THREE.SpotLight(0xffffff, 1.0);
        light.position.set(100, 500, 500);
        scene.add(light);
        light.castShadow = true;
        console.log(light);

        // 補助線
        const axesHelper = new THREE.AxesHelper(500);
        scene.add(axesHelper);
        const gridHelper = new THREE.GridHelper(1, 1);
        scene.add(gridHelper);

        // カメラコントロールの作成
        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;
          }
        });

        // キーボードのキーを離した際の処理
        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;
          }
        });

        // レンダラーの作成
        renderer = new THREE.WebGLRenderer({
          alpha: true,
          antialias: true,
        });
        renderer.setSize(window.innerWidth, window.innerHeight);
        renderer.physicallyCorrectLight = true;

        // cubeTextureLoader
        const loader = new CubeTextureLoader(); // 修正
        // loader.setPath("../texture_photo/"); //呼び足してくるディレクトリの固定化
        const textureCube = loader.load([
          '../texture_photo/resumeP1_sq.png',
          '../texture_photo/resumeP1_sq.png',
          '../texture_photo/resumeP1_sq.png',
          '../texture_photo/resumeP1_sq.png',
          '../texture_photo/resumeP1_sq.png',
          '../texture_photo/resumeP1_sq.png'
        ]);
        const material = new THREE.MeshBasicMaterial({
          color: 0xffffff,
          envMap: textureCube,
        });
        const geometry = new THREE.BoxGeometry(30, 30, 30);
        const mesh = new THREE.Mesh(geometry, material);
        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.z = Number(moveBackward) - Number(moveForward);
        direction.normalize();
        const delta = speed * 0.1; // 移動距離
        controls.getObject().translateX(direction.x * delta);
        controls.getObject().translateZ(direction.z * delta);
      }

      // 関数の実行
      init();
      animate();
    </script>
  </body>
</html>