Newer
Older
2024-Tsubasa / system / sys2.html
@Tsubasa Tsubasa on 25 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>
    <style>
        body {
            margin: 0;
            overflow: hidden;
        }
    </style>
</head>

<body>
    <div id="WebGL-output"></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 { GLTFLoader } from "https://unpkg.com/three@0.126.1/examples/jsm/loaders/GLTFLoader.js";
        import { FBXLoader } from "https://unpkg.com/three@0.126.1/examples/jsm/loaders/FBXLoader.js";

        let camera;
        let scene;
        let renderer;
        let model;
        let mixer;
        let clock;
        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,
                100
            );
            //カメラセット
            camera.position.set(10.5, 1.2, -11); // カメラの位置
            camera.lookAt(new THREE.Vector3(0, 0, 0));

            //ライトの作成
            const light = new THREE.PointLight(0xffffff, 1, 100);
            light.position.set(10.5, 1.2, -11);
            scene.add(light);
            light.castShadow = true;
            console.log(light);

            function update() {
                light.position.copy(camera.position);
            }

            // カメラコントロールの作成
            controls = new PointerLockControls(camera, document.body);

            document.addEventListener("click", function () {
                controls.lock();
            });
            // 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;

            const loader = new GLTFLoader();

            loader.load("model/tenjikai3.glb", function (gltf) {
                model = gltf.scene;
                model.traverse((object) => {
                });
                scene.add(model);
            });

            document
                .getElementById("WebGL-output")
                .appendChild(renderer.domElement);
        }

        // カメラの移動設定
        function updateCameraPosition() {
            const speed = 0.1; // 移動速度
            //.moveForward(Number) で前、.moveRightで右に
            if (moveForward) controls.moveForward(speed);
            if (moveBackward) controls.moveForward(-speed);
            if (moveRight) controls.moveRight(speed);
            if (moveLeft) controls.moveRight(-speed);
        }

        function animate() {
            requestAnimationFrame(animate);
            updateCameraPosition();
            if (mixer) mixer.update(clock.getDelta());
            renderer.render(scene, camera);
        }

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

</html>