<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Three.js 悬臂梁动画演示:交互式 3D 模型</title>
    <style>
        body { margin: 0; }
        canvas { display: block; }
    </style>
</head>
<body>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/110/three.min.js"></script>
    <script>
        var scene, camera, renderer, pivot, beam;
<pre><code>    function init() {
        // 创建场景
        scene = new THREE.Scene();

        // 创建相机
        camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
        camera.position.z = 5;

        // 创建渲染器
        renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);

        // 创建悬臂梁
        var geometry = new THREE.BoxGeometry(1, 0.1, 0.1);
        var material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
        beam = new THREE.Mesh(geometry, material);
        beam.position.y = -1;
        scene.add(beam);

        // 创建旋转点
        pivot = new THREE.Group();
        scene.add(pivot);
        pivot.add(beam);

        // 添加鼠标事件
        document.addEventListener('mousedown', onDocumentMouseDown, false);
        document.addEventListener('touchstart', onDocumentTouchStart, false);
        document.addEventListener('touchmove', onDocumentTouchMove, false);

        // 渲染场景
        render();
    }

    function render() {
        requestAnimationFrame(render);
        renderer.render(scene, camera);
    }

    var mouseDown = false, startX, startY;

    function onDocumentMouseDown(event) {
        event.preventDefault();
        mouseDown = true;
        startX = event.clientX;
        startY = event.clientY;
    }

    function onDocumentTouchStart(event) {
        event.preventDefault();
        mouseDown = true;
        startX = event.touches[0].clientX;
        startY = event.touches[0].clientY;
    }

    function onDocumentTouchMove(event) {
        event.preventDefault();
        if (!mouseDown) return;
        var deltaX = event.touches[0].clientX - startX;
        var deltaY = event.touches[0].clientY - startY;
        startX = event.touches[0].clientX;
        startY = event.touches[0].clientY;
        rotateScene(deltaX, deltaY);
    }

    function rotateScene(deltaX, deltaY) {
        pivot.rotation.y += deltaX * 0.01;
        pivot.rotation.x += deltaY * 0.01;
    }

    init();
&lt;/script&gt;
</code></pre>
</body>
</html>
Three.js 悬臂梁动画演示:交互式 3D 模型

原文地址: https://www.cveoy.top/t/topic/p7Kr 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录