04、顶点立方体

创建日期:2024-07-08
更新日期:2024-07-08
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>04.顶点立方体</title>
    <link href="css/common.css" rel="stylesheet" />
    <script src="js/three.js"></script>
</head>
<body>
    <script>
        var scene = new THREE.Scene();
        var camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 0.1, 1000);
        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);

        var light = new THREE.DirectionalLight(0xffffff);
        light.position.set(10, 10, 10).normalize();
        scene.add(light);

        // 顶点
        var geometry = new THREE.BufferGeometry();
        var vertices = new Float32Array([
            0, 0, 0, // 0
            1.0, 0, 0, // 1
            1.0, 1.0, 0,  // 2
            0, 1.0, 0, // 3

            0, 0, 1.0, // 4
            1.0, 0, 1.0, // 5
            1.0, 1.0, 1.0, // 6
            0, 1.0, 1.0  // 7
        ]);
        geometry.addAttribute('position', new THREE.BufferAttribute(vertices, 3));

        // 索引
        var index = [
            // 前面
            0, 1, 2,
            0, 2, 3,

            // 后面
            4, 7, 6,
            4, 6, 5,

            // 上面
            3, 2, 6,
            3, 6, 7,

            // 下面
            0, 4, 5,
            0, 5, 1,

            // 左面
            0, 3, 7,
            0, 7, 4,

            // 右面
            1, 5, 6,
            1, 6, 2
        ];
        geometry.setIndex(index);

        var material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
        var mesh = new THREE.Mesh(geometry, material);
        scene.add(mesh);

        camera.position.set(0, 0, 10);
        camera.lookAt(new THREE.Vector3(0, 0, 0));

        var render = function () {
            requestAnimationFrame(render);
            mesh.rotation.x += 0.01;
            mesh.rotation.y += 0.01;
            renderer.render(scene, camera);
        }
        render();
    </script>
</body>
</html>