14

我正在尝试在threejs场景中进行一些相机控制。

我查看了这个示例,似乎它完全由这些行处理:

controls = new THREE.TrackballControls( camera );
controls.rotateSpeed = 1.0;
controls.zoomSpeed = 1.2;
controls.panSpeed = 0.8;
controls.noZoom = false;
controls.noPan = false;
controls.staticMoving = true;
controls.dynamicDampingFactor = 0.3;

那些使用的线路THREE.TrackballControls来自js/controls/TrackballControls.js

我的问题是:到底是TrackballControls.js什么?我在threejs 下载包中找不到它。是扩展吗?我在哪里可以找到它?(除了直接从示例文件中获取之外)

4

3 回答 3

13

TrackballControls.js位于js/controls目录的examples子目录中。

https://github.com/mrdoob/three.js/tree/master/examples/js/controls

它是示例的一部分——而不是库。您必须将其明确包含在您的项目中。您可以根据自己的喜好自由修改。

您可能还需要考虑OrbitControls,如果您的场景有一个自然的“向上”方向,这是合适的。

三.js r.62

于 2013-11-12T12:23:49.733 回答
2

我注意到@WestLangley 链接的速度比本示例使用的旧版本TrackballControls慢得多。

摆弄新代码:https ://jsfiddle.net/vt8n6dcs/1/

摆弄旧代码:https ://jsfiddle.net/vt8n6dcs/

我用 Firefox 41.0.2 对其进行了测试。没有基准,性能下降非常明显,因为当您使用鼠标开始旋转时,有时图像更新会滞后。旧版本也会发生这种情况,但频率要低得多。毫不奇怪,Chrome 48.0.2564.82 中的性能似乎完全相同。

此外,鼠标灵敏度要低得多。你必须移动它很多才能对图像产生明显的影响。这发生在 Firefox 和 Chrome 上。

我发现旧版本的唯一问题是命令的中心总是设置在页面的中心。您可以使用较新版本的handleResize()函数代码来修复它:

this.handleResize = function () {

    if ( this.domElement === document ) {

        this.screen.offsetLeft = 0;
        this.screen.offsetTop = 0;
        this.screen.width = window.innerWidth;
        this.screen.height = window.innerHeight;

    } else {

        var box = this.domElement.getBoundingClientRect();
        // adjustments come from similar code in the jquery offset() function
        var d = this.domElement.ownerDocument.documentElement;
        this.screen.offsetLeft = box.left + window.pageXOffset - d.clientLeft;
        this.screen.offsetTop = box.top + window.pageYOffset - d.clientTop;
        this.screen.width = box.width;
        this.screen.height = box.height;

    }

    this.radius = ( this.screen.width + this.screen.height ) / 4;

};
于 2016-02-12T14:19:13.937 回答
-2

您可以直接从示例中导入它。将以下行插入您的 HTML 文件中<head>

<script src="https://threejs.org/examples/js/controls/TrackballControls.js"></script>

是一个演示。

于 2021-05-31T00:35:34.037 回答