如何用鼠标滚轮缩放一个three.js场景?

亚历克斯

我有一个简单的three.js图形,我尝试使用这个这个问题中的答案来使创建的图可以通过鼠标滚轮缩放。通过使用鼠标滚轮,我想放大图形或缩小图形。

这是完整的代码:pastebin 链接

但是,转动鼠标滚轮时没有任何反应,我也没有收到错误消息。也许我错过了什么?

杜尔加

演示

var container, camera, scene, renderer, colors;
var selected = 0;
var selectedObject;
var objects = [];

// DOM element...
container = document.createElement('div');
document.body.appendChild(container);

// Camera...
camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 10000);
camera.position.set(0, 0, 150);

// Scene...
scene = new THREE.Scene();
scene.add(camera);

// Renderer...
renderer = new THREE.WebGLRenderer({
    clearAlpha: 1
});
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setClearColor(0xffffff, 1);
document.body.appendChild(renderer.domElement);

// Scatter plot...
scatterPlot = new THREE.Object3D();
scene.add(scatterPlot);

// Plot some random points...
circle = new THREE.CircleGeometry(1, 20);


colors = [];
var max = 50;
var min = -50;

for (var i = 0; i < 10; i++) {         

    var object = new THREE.Mesh( circle.clone(), new THREE.MeshBasicMaterial( { color: new THREE.Color('black'), opacity: 0.5 } ) );
    object.position.x = Math.random() * (max - min) + min;
    object.position.y = Math.random() * (max - min) + min;
    object.position.z = 0;                 

    scene.add( object );
    objects.push( object );

}

animate();

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

raycaster = new THREE.Raycaster();
mouse = new THREE.Vector2();
document.addEventListener( 'mousedown', onDocumentMouseDown, false );
document.addEventListener( 'mousewheel', onDocumentMouseWheel, false );

function onDocumentMouseDown( event ) {
    event.preventDefault();
    mouse.x = ( event.clientX / renderer.domElement.clientWidth ) * 2 - 1;
    mouse.y = - ( event.clientY / renderer.domElement.clientHeight ) * 2 + 1;
    raycaster.setFromCamera( mouse, camera );
    var intersects = raycaster.intersectObjects( objects );
    if ( intersects.length > 0 ) {
        //intersects[ 0 ].object.material.color.set('red');
        //intersects[ 0 ].object.geometry.scale(1.1,1.1,1.1);
        if (selected === 0) {
            selected = 1;
            selectedObject = intersects[ 0 ].object;
            selectedObject.material.color.set('red');
            console.log(selectedObject.position.x);
        } else {
            selected = 0;
            var geometry = new THREE.Geometry();
            geometry.vertices.push(intersects[ 0 ].object.position);
            geometry.vertices.push(selectedObject.position);
            var line = new THREE.Line(geometry, new THREE.LineBasicMaterial({ color: 0x0000ff }));
            scene.add(line);

            selectedObject.material.color.set('black');
        }

    }
}

function onWindowResize() {        
    camera.left = window.innerWidth / - 2;
    camera.right = window.innerWidth / 2;
    camera.top = window.innerHeight / 2;
    camera.bottom = window.innerHeight / - 2;
    camera.aspect = window.innerWidth / window.innerHeight;        

    renderer.setSize( window.innerWidth, window.innerHeight );
}
function onDocumentMouseWheel( event ) {

    var fovMAX = 160;
    var fovMIN = 1;

    camera.fov -= event.wheelDeltaY * 0.05;
    camera.fov = Math.max( Math.min( camera.fov, fovMAX ), fovMIN );
    camera.projectionMatrix = new THREE.Matrix4().makePerspective(camera.fov, window.innerWidth / window.innerHeight, camera.near, camera.far);

}
body { margin: 0; }
canvas { width: 100%; height: 100% }
<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/54/three.js"></script>

在您的代码中添加事件侦听器

document.addEventListener( 'mousewheel', onDocumentMouseWheel, false );

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

RGB鼠标滚轮仅影响最后一个场景

来自分类Dev

单击说明此场景的图像后显示一个 Three.js 场景

来自分类Dev

如何清除THREE.JS场景

来自分类Dev

无法获得场景以Three.js呈现

来自分类Dev

在画布中渲染Three.js场景

来自分类Dev

场景中的静态对象-Three.js

来自分类Dev

Three.js获得场景的中心

来自分类Dev

Three.js将鼠标移动限制为仅场景

来自分类Dev

由鼠标滚动控制的Three.js场景渲染了吗?

来自分类Dev

Three.js在一个场景中具有多个纹理和图像

来自分类Dev

Three.js在一个场景中具有多个纹理和图像

来自分类Dev

在 bootstrap 网格中放置一个 Three.js 场景

来自分类Dev

在Vuetify.js组件中加载Three.js场景

来自分类Dev

如何在three.js中访问场景元素

来自分类Dev

Three.js-如何为整个场景创建镜像

来自分类Dev

如何在three.js中获得整个场景的boundingSphere?

来自分类Dev

如何在three.js中访问场景元素

来自分类Dev

如何从内存中擦除场景和网格?Three.js

来自分类Dev

在Three.js场景中添加多个球体

来自分类Dev

从canvas元素本地获取three.js场景进行操作

来自分类Dev

Three.js:for场景中每个网格的循环?

来自分类Dev

在Three.js场景中选择和修改材料

来自分类Dev

缓慢地从Three.js场景中删除许多对象

来自分类Dev

three.js:按名称或ID访问场景对象

来自分类Dev

Three.js,从Collada导入的相机无法查看对象场景

来自分类Dev

three.js-灯光移动时不更新场景照明

来自分类Dev

Three.js Raycaster未检测到场景网格

来自分类Dev

为Three.js场景创建缩略图

来自分类Dev

Three.js在场景的左右移动相机