除非我单击并轻轻拖动,否则使用Three.js的mousedown事件将不起作用

市场希腊

出于某种原因,在下面的代码中,当我单击对象时,“ intersects”变量在onDocumentMouseDown事件处理程序中不包含任何项目。为了使其能够检测到单击的对象,我必须单击并稍微拖动鼠标,然后鼠标才能拾取单击的项目。如果这很重要,我也正在使用trackballcontrols。我在这里有一个jsfiddle示例:http : //jsfiddle.net/marktreece/xvQ3f/

在jsfiddle示例中,单击多维数据集,然后注意到颜色没有按预期变化。现在单击多维数据集,然后释放鼠标按钮,将其稍微移动,然后颜色会发生变化。我怎样才能做到,只需单击对象就足够了?

这是我的mousedown事件处理程序:

function onDocumentMouseDown( event ) {
    event.preventDefault();
    var vector = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1, - ( event.clientY / window.innerHeight ) * 2 + 1, 0.5 );
    projector.unprojectVector( vector, camera );
    var raycaster = new THREE.Raycaster( camera.position, vector.sub( camera.position ).normalize() );
    var intersects = raycaster.intersectObjects( scene.children, true );
    if ( intersects.length > 0 ) {
        intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
    }
}
灰色突出

从我可以看到的角度来看,在您的示例中,光线投射效果很好,并且相交变量不为空。问题在于,当您使用TrackballControls时,仅在相机更改其位置时才执行渲染。这就是为什么只需拖动鼠标即可更改框的颜色的原因。

下面,我在一个新的渲染函数调用中包含了您的动画函数。这样就解决了问题。但是,请注意,这不是最有效的解决方案,因为渲染是每帧执行一次。

function animate() {
    try{
        requestAnimationFrame( animate );
        controls.update();
        render();
    }
    catch(err){
        alert("animate error. " + err.message);
    }
}

希望这可以帮助!

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

除非我关闭“最大化游戏”并选择我的播放器,否则冲刺将不起作用

来自分类Dev

除非我单击页面,否则Firefox不会调用`beforeunload`事件。

来自分类Dev

如果我删除警报语句,JS将不起作用

来自分类Dev

除非我包含println或断点,否则代码不起作用

来自分类Dev

除非我提供全文,否则正则表达式在pywinauto中不起作用

来自分类Dev

除非我在函数中定义变量,否则传递变量不起作用

来自分类Dev

单击骰子将不起作用(javascript)

来自分类Dev

除非刷新页面,否则“重置”按钮将不起作用,否则会给我一个错误(React.JS)

来自分类Dev

除非我添加a.class,否则css .class在锚标记上不起作用。为什么?

来自分类Dev

骨干JS按钮单击事件不起作用

来自分类Dev

Angular Chart Js图例单击事件不起作用

来自分类Dev

node.js 中的单击事件不起作用

来自分类Dev

除非是第一次在脚本中调用,否则Backbone.js函数将不起作用

来自分类Dev

og:image不起作用,除非我尝试使用“ Open Graph Object Debugger”

来自分类Dev

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

来自分类Dev

除非我中断用户表单初始化,否则事件处理类不会触发

来自分类Dev

除非从函数调用,否则Javascript Integer增量将不起作用

来自分类Dev

除非设置为0.0.0.0,否则MongoDB bind_ip将不起作用

来自分类Dev

除非选择了某些程序,否则媒体密钥将不起作用

来自分类Dev

除非调整屏幕大小,否则悬停时的滚动功能将不起作用

来自分类Dev

除非我在其末尾附加一个空字符串,否则为什么我的动态src路径不起作用?

来自分类Dev

通过SSH进入我的Vagrant虚拟机以运行python脚本...但是除非我在VM本身中,否则python脚本不起作用

来自分类Dev

WPF按钮单击事件不起作用

来自分类Dev

jQuery单击事件不起作用

来自分类Dev

单击事件上的Listview不起作用

来自分类Dev

密谋按钮单击事件不起作用

来自分类Dev

Angular 2 单击事件不起作用

来自分类Dev

单击事件在 dcmads 上不起作用

来自分类Dev

单击事件:switch 语句不起作用

Related 相关文章

  1. 1

    除非我关闭“最大化游戏”并选择我的播放器,否则冲刺将不起作用

  2. 2

    除非我单击页面,否则Firefox不会调用`beforeunload`事件。

  3. 3

    如果我删除警报语句,JS将不起作用

  4. 4

    除非我包含println或断点,否则代码不起作用

  5. 5

    除非我提供全文,否则正则表达式在pywinauto中不起作用

  6. 6

    除非我在函数中定义变量,否则传递变量不起作用

  7. 7

    单击骰子将不起作用(javascript)

  8. 8

    除非刷新页面,否则“重置”按钮将不起作用,否则会给我一个错误(React.JS)

  9. 9

    除非我添加a.class,否则css .class在锚标记上不起作用。为什么?

  10. 10

    骨干JS按钮单击事件不起作用

  11. 11

    Angular Chart Js图例单击事件不起作用

  12. 12

    node.js 中的单击事件不起作用

  13. 13

    除非是第一次在脚本中调用,否则Backbone.js函数将不起作用

  14. 14

    og:image不起作用,除非我尝试使用“ Open Graph Object Debugger”

  15. 15

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

  16. 16

    除非我中断用户表单初始化,否则事件处理类不会触发

  17. 17

    除非从函数调用,否则Javascript Integer增量将不起作用

  18. 18

    除非设置为0.0.0.0,否则MongoDB bind_ip将不起作用

  19. 19

    除非选择了某些程序,否则媒体密钥将不起作用

  20. 20

    除非调整屏幕大小,否则悬停时的滚动功能将不起作用

  21. 21

    除非我在其末尾附加一个空字符串,否则为什么我的动态src路径不起作用?

  22. 22

    通过SSH进入我的Vagrant虚拟机以运行python脚本...但是除非我在VM本身中,否则python脚本不起作用

  23. 23

    WPF按钮单击事件不起作用

  24. 24

    jQuery单击事件不起作用

  25. 25

    单击事件上的Listview不起作用

  26. 26

    密谋按钮单击事件不起作用

  27. 27

    Angular 2 单击事件不起作用

  28. 28

    单击事件在 dcmads 上不起作用

  29. 29

    单击事件:switch 语句不起作用

热门标签

归档