javascript - 浏览器中的对象旋转不平滑

标签 javascript three.js

我正在浏览器中可视化对象。对象应该被视为一次绕一个轴(X 或 Y 或 Z)旋转,或者用户可以使用鼠标旋转它。 我遇到的问题:

1-当我绕一个轴自动旋转对象时,它开始以一种可行的方式旋转(即使它不像 OpenGL 中那样平滑),一分钟后,旋转开始变得非常离散,即 Angular 似乎增加 180 度)

2-当我用鼠标旋转对象时,它一点也不平滑(我不知道鼠标事件是多久被触发的)。

3- 如何用鼠标绕两个轴旋转对象? Y 和 X。

4-如何将 View 窗口放入一个小div中?我尝试过,但它变得很大并且超出了界限,

这是我的代码:

<script>
    var t = 0;
    var container, interval,
            camera, scene, render,
            linesMaterial,
            isMouseDown = false, onMouseDownPosition,
            radius = 200, angle_y = 0, angle_x = 0;
    init();

    function init() {
        var t = 0;
        var scene = new THREE.Scene();
        camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);

        var renderer = new THREE.WebGLRenderer();
        renderer.setSize(window.innerWidth, window.innerHeight);
        document.body.appendChild(renderer.domElement);

        {#        renderer.setSize(document.getElementById('test').clientWidth,  document.getElementById('test').clientHeight);#}
        {#            document.getElementById('test').appendChild(renderer.domElement);#}


        // Object drawing


        onMouseDownPosition = new THREE.Vector2();

        document.addEventListener('mousemove', onDocumentMouseMove, false);
        document.addEventListener('mousedown', onDocumentMouseDown, false);
        document.addEventListener('mouseup', onDocumentMouseUp, false);
        document.addEventListener('mousewheel', onDocumentMouseWheel, false);


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

            angle_y = angle_y + 0.1;

            camera.position.x = {{ neuron.center.x }} +radius * Math.cos(angle_y);
            camera.position.y = {{ neuron.center.y }};
            camera.position.z = {{ neuron.center.z }} +radius * Math.sin(angle_y);


            camera.position.x = {{ neuron.center.x }};
            camera.position.y = {{ neuron.center.y }} +radius * Math.cos(angle_x);
            camera.position.z = {{ neuron.center.z }} +radius * Math.sin(angle_x);
            camera.lookAt(new THREE.Vector3({{ neuron.center.x }}, {{ neuron.center.y }}, {{ neuron.center.z }}));

        };

        render();
    }

    function onDocumentMouseDown(event) {

        event.preventDefault();

        isMouseDown = true;
        onMouseDownPosition.x = event.clientX;
        onMouseDownPosition.y = event.clientY;
    }

    function onDocumentMouseMove(event) {

        event.preventDefault();

        if (isMouseDown) {
            var angle_step = 0.4;

            if (event.clientX < onMouseDownPosition.x) {
                angle_y += angle_step;
            }
            else if (event.clientX > onMouseDownPosition.x) {
                angle_y -= angle_step;
            }

            if (event.clientY < onMouseDownPosition.y) {
                angle_x += angle_step;
            }
            else if (event.clientY > onMouseDownPosition.y) {
                angle_x -= angle_step;
            }
        }
        render();

    }

    function onDocumentMouseUp(event) {

        event.preventDefault();

        isMouseDown = false;
        render();
    }

    function onDocumentMouseWheel(event) {

        var wheel_Step = 5;

        if (event.wheelDeltaY > 0) {

            radius -= wheel_Step;
        }
        else {
            radius += wheel_Step;
        }
    }


</script>

非常感谢

最佳答案

要使窗口更小,您可以使用元素样式并将高度和宽度值设置为您希望其显示的内容:

renderer.domElement.styleWidth = '100px';
renderer.domElement.styleHeight = '100px';

对于鼠标控制和旋转,您应该查看 Threejs.org 上的示例(尤其是“canvas”下):

关于javascript - 浏览器中的对象旋转不平滑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38327701/

相关文章:

javascript - Angular JS - 如何清理 Controller 中的 HTML?

javascript - Google Analytics 中没有电子商务跟踪

php - Nodejs从数据库读取 session

javascript - WebGL:如何通过矢量缩放对象,或生成此结果(包括图像)

three.js - 三个js二维矩阵可视化

javascript - 三.js图像纹理调整大小消息

javascript - 在 three.js 中即时更改特定面孔的纹理

连续字符串中的 javascript [object Window]

javascript - 如何使用一个大图像并将其分解为网站的小块?

javascript - Three.js OBJ MTL 加载器在环境光下不起作用