OnDocumentMouseMove Three.js 不起作用

jh山

我对three.js完全没有经验,但我正在尝试创建一种与此相同的相机效果:https ://threejs.org/examples/#webgl_geometry_colors

我试图使用以下代码读出鼠标位置并应用它们(在示例中它们以相同的方式执行)。为了找出问题出在哪里,我输入了“camera.positon.x = 1000”以查看它是否有效,但它无效。现在我不知道问题出在哪里,但我就是无法让鼠标工作。

function onDocumentMouseMove( event ) {
    mouseX = ( event.clientX - windowHalfX );
    mouseY = ( event.clientY - windowHalfY );
    camera.position.x = 10000;
}   

(顺便说一下,我不想使用轨道控制)提前致谢

下面是整个代码

<script>

    var renderer, camera, controls, scene, mesh1, mesh2;

function init(){
    renderer = new THREE.WebGLRenderer({canvas: document.getElementById('myCanvas'), antialias: true});   
    renderer.setClearColor(0x000044);        

    scene = new THREE.Scene();        
    camera = new THREE.PerspectiveCamera(15, window.innerWidth/window.innerHeight, 0.1, 3000);    
    camera.position.set(0,0,750);        

    resize();
    window.onresize = resize;

    var light = new THREE.AmbientLight(0xFFFFFF, 0.9);
    scene.add(light);

    var light2 = new THREE.PointLight(0xFFFFFF, 1);
    scene.add(light2);
    light2.position.set(0,8,75);

    var geometry = new THREE.BoxGeometry(30, 30, 1);
    var material = new THREE.MeshPhongMaterial({
        color: 0xFF1111,
    });
    mesh1 = new THREE.Mesh(geometry,material);
    mesh1.rotation.x = -0.05;

    scene.add(mesh1);
    mesh1.position.set(0,0,50);

    var geometry = new THREE.BoxGeometry(30, 30, 1);
    var material = new THREE.MeshPhongMaterial({
        color: 0x11FF11,
    });
    mesh2 = new THREE.Mesh(geometry,material);
    mesh2.rotation.x = -0.05;

    scene.add(mesh2);
    mesh2.position.set(0,0,0);

    var geometry = new THREE.BoxGeometry(30, 30, 1);
    var material = new THREE.MeshPhongMaterial({
        color: 0x1111FF,
    });
    mesh3 = new THREE.Mesh(geometry,material);
    mesh3.rotation.x = -0.05;

    scene.add(mesh3);
    mesh3.position.set(0,0, -50);

    document.addEventListener( 'mousemove', onDocumentMouseMove, false );
}

function resize() {
    renderer.setSize(window.innerWidth, window.innerHeight);
    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
}

function onDocumentMouseMove( event ) {
    mouseX = ( event.clientX - windowHalfX );
    mouseY = ( event.clientY - windowHalfY );
    camera.position.x = 10000;
}    

function render() {    
    requestAnimationFrame( render );
    renderer.render( scene, camera );
    camera.position.x += 0.5;
    camera.lookAt(new THREE.Vector3(0, 0, 0));
}

init(); render();    

</script>
疯兔76

变量windowHalfXwindowHalfY未在您的代码中定义。

如果相机的位置应该取决于鼠标位置,那么您必须通过鼠标位置的变化来操纵相机位置。这意味着您必须计算当前鼠标位置和先前鼠标位置的差异。

如果要计算位置的操作,取决于鼠标相对于画布中心的位置,那么代码应该看起来像这样:

var prevDeltaX = 0, prevDeltaY = 0;
function onDocumentMouseMove( event ) {
    var mouseX = event.clientX;
    var mouseY = event.clientY;
    var deltaX = (window.innerWidth / 2 - mouseX);
    var deltaY = (mouseY - window.innerHeight / 2);
    camera.position.x += deltaX - prevDeltaX;
    camera.position.y += deltaY - prevDeltaY;
    prevDeltaX = deltaX; prevDeltaY = deltaY; 
}

看片段:

var renderer, camera, controls, scene, mesh1, mesh2;

function init(){
    renderer = new THREE.WebGLRenderer({canvas: document.getElementById('myCanvas'), antialias: true});   
    renderer.setClearColor(0x000044);        

    scene = new THREE.Scene();        
    camera = new THREE.PerspectiveCamera(15, window.innerWidth/window.innerHeight, 0.1, 3000);    
    camera.position.set(0,0,750);        

    resize();
    window.onresize = resize;

    var light = new THREE.AmbientLight(0xFFFFFF, 0.9);
    scene.add(light);

    var light2 = new THREE.PointLight(0xFFFFFF, 1);
    scene.add(light2);
    light2.position.set(0,8,75);

    var geometry = new THREE.BoxGeometry(30, 30, 1);
    var material = new THREE.MeshPhongMaterial({
        color: 0xFF1111,
    });
    mesh1 = new THREE.Mesh(geometry,material);
    mesh1.rotation.x = -0.05;

    scene.add(mesh1);
    mesh1.position.set(0,0,50);

    var geometry = new THREE.BoxGeometry(30, 30, 1);
    var material = new THREE.MeshPhongMaterial({
        color: 0x11FF11,
    });
    mesh2 = new THREE.Mesh(geometry,material);
    mesh2.rotation.x = -0.05;

    scene.add(mesh2);
    mesh2.position.set(0,0,0);

    var geometry = new THREE.BoxGeometry(30, 30, 1);
    var material = new THREE.MeshPhongMaterial({
        color: 0x1111FF,
    });
    mesh3 = new THREE.Mesh(geometry,material);
    mesh3.rotation.x = -0.05;

    scene.add(mesh3);
    mesh3.position.set(0,0, -50);

    document.addEventListener( 'mousemove', onDocumentMouseMove, false );
}

function resize() {
    renderer.setSize(window.innerWidth, window.innerHeight);
    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
}

var prevDeltaX = 0, prevDeltaY = 0;
function onDocumentMouseMove( event ) {
    var mouseX = event.clientX;
    var mouseY = event.clientY;
    var deltaX = (window.innerWidth / 2 - mouseX);
    var deltaY = (mouseY - window.innerHeight / 2);
    camera.position.x += deltaX - prevDeltaX;
    camera.position.y += deltaY - prevDeltaY;
    prevDeltaX = deltaX; prevDeltaY = deltaY; 
}    

function render() {    
    requestAnimationFrame( render );
    renderer.render( scene, camera );
    //camera.position.x += 0.5;
    camera.lookAt(new THREE.Vector3(0, 0, 0));
}

init(); render(); 
<script src="https://threejs.org/build/three.min.js"></script>
<canvas id="myCanvas"></canvas>

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

THREE.ArrayCamera图层不起作用three.js

来自分类Dev

THREE.js轨道控件不起作用

来自分类Dev

Three.js renderer.autoClear属性不起作用?

来自分类Dev

Three.js示例代码,来自StackOverflow,不起作用

来自分类Dev

顶点位移在Three.js中不起作用

来自分类Dev

Three.js导入Collada动画不起作用

来自分类Dev

Three.js Shader材质照明不起作用

来自分类Dev

Three.js TimeLineLite动画不起作用

来自分类Dev

Three.js OBJLoader解析方法不起作用

来自分类Dev

three.js SpotLight急性光束不起作用

来自分类Dev

Javascript Three.JS阴影贴图不起作用

来自分类Dev

Three.js .obj阴影不起作用

来自分类Dev

THREE.js旋转副本不起作用

来自分类Dev

Three.js的输入标签不起作用

来自分类Dev

Three.js 中的 FilmPass 不起作用

来自分类Dev

为什么这个简单的THREE.js javascript粒子系统不起作用?

来自分类Dev

Three.js轨迹球控件拖动事件在UIkit模态中不起作用

来自分类Dev

three.js OrbitControls不起作用,控件未定义

来自分类Dev

Three.js多维数据集-不同的纹理不起作用

来自分类Dev

Three.js旋转摄像机俯仰不起作用?

来自分类Dev

JS点击不起作用

来自分类Dev

JS文件不起作用

来自分类Dev

JS替换不起作用

来自分类Dev

JS Slider不起作用

来自分类Dev

JS loadResponse不起作用

来自分类Dev

JS for 循环不起作用

来自分类Dev

物化JS不起作用?

来自分类Dev

JS链接不起作用

来自分类Dev

JS if 语句不起作用