【问题标题】:ThreeJS full scene minimal rotationThreeJS 全场景最小旋转
【发布时间】:2019-03-02 22:56:43
【问题描述】:

我想知道这个网站 (http://www.cryptarismission.com/) 是如何在您将鼠标移到不同方向时将其场景面向不同方向的。

在他们的主页上,似乎当您移动鼠标时,场景以非常小的轴旋转流畅地跟随。

使用 Three.js 这个东西背后的想法是什么?我知道您可以旋转物体、场景或相机,但我不确定要旋转什么。我正在考虑旋转整个场景容器,但我不知道这是否好。

【问题讨论】:

标签: three.js


【解决方案1】:

您可以根据鼠标位置更改相机位置并在每个循环中调用lookAt,也可以更改整个场景旋转。这是第一种方法的工作原理。

<!DOCTYPE html>
<html lang="en">

<head>
    <title>ThreeJS full scene minimal rotation</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
    <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/96/three.min.js"></script>
    <style>
        body {
            margin: 0px;
            padding: 0px;
            overflow: hidden;
        }
    </style>
</head>

<body>
    <canvas></canvas>
</body>

<script>
    var camera, scene, renderer, stats, windowHalfX = window.innerWidth / 2,
        windowHalfY = window.innerHeight / 2,
        mouseX = 0,
        mouseY = 0;

    init();
    animate();

    function init() {
        camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 2000);
        camera.position.set(30, 30, 30)
        scene = new THREE.Scene();

        scene.add(new THREE.Mesh(
            new THREE.BoxGeometry(5, 5, 5),
            new THREE.MeshBasicMaterial({ color: 0x00ff00 })
        ));

        renderer = new THREE.WebGLRenderer({ antialias: true, canvas: document.querySelector('canvas') });
        renderer.setPixelRatio(window.devicePixelRatio);
        renderer.setSize(window.innerWidth, window.innerHeight);
        window.addEventListener('mousemove', onDocumentMouseMove, false);
    }

    function onDocumentMouseMove(event) {
        mouseX = (event.clientX - windowHalfX) / 10;
        mouseY = (event.clientY - windowHalfY) / 10;
    }

    function animate() {
        requestAnimationFrame(animate);
        render();
    }

    function render() {
        camera.position.x += (mouseX - camera.position.x) * .05;
        camera.position.y += (-mouseY - camera.position.y) * .05;
        camera.lookAt(scene.position);
        renderer.render(scene, camera);
    }
</script>

</html>

【讨论】:

  • 感谢 Tomasz,这正是我正在寻找的起点。
  • @ArchieHerbias 很高兴我能帮上忙
猜你喜欢
  • 1970-01-01
  • 2017-10-21
  • 2018-08-17
  • 2018-04-05
  • 1970-01-01
  • 2013-12-06
  • 2014-04-29
  • 2014-02-22
  • 1970-01-01
相关资源
最近更新 更多