【问题标题】:How can i drag object and drop it inside three.js Mesh?如何将对象拖放到 three.js Mesh 中?
【发布时间】:2020-07-09 07:12:57
【问题描述】:

这是我尝试过的:

    $( ".box" ).draggable({
      helper:'clone',
      start: function( event, ui ) {
        back.material.map = new THREE.Color(0xeeeeee);
        back.material.needsUpdate = true;
      },
      stop: function( event, ui ) {
        back.material.map = texture;
        back.material.needsUpdate = true;
      }
    });
    $("canvas").droppable({ // here I've selected canvas for dropping element
        accept:".box",
        drop: function( event, ui ) {
          var item = $(ui.draggable).clone();
          $(this).addClass("ui-state-highlight").append(item);
          hanger1();  
       }
   });

基本上,我想从three.js 场景外部拖动元素并将其放在画布内three.js mesh 上。我正在使用jQuery UI DraggableDroppable,其中我只能将元素放在html DOM 中,但我想将它放在three.js mesh 上。

我怎样才能使它成为可能?

如果你能做到这一点。所以我会非常感谢你的努力。

【问题讨论】:

    标签: jquery-ui canvas three.js jquery-ui-draggable jquery-ui-droppable


    【解决方案1】:

    我怎样才能使它成为可能?

    您可以尝试的一种可能方法是使用CSS2DRenderer,就像在这个官方示例中展示的那样:https://threejs.org/examples/css2d_label

    检查代码时,您会看到标签是通过 HTML/CSS 呈现的。因此,当一个 DOM 元素被拖到画布上并放下时,您可以将其包装到 CSS2DObject 的实例中,并将其作为目标网格的子对象添加到场景图中。

    如果您需要确定鼠标光标悬停在哪个网格上,您可以使用基本的光线投射。这意味着您可以像这样在mouse 事件侦听器中计算鼠标坐标:

    mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
    mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;
    

    然后使用这些坐标来设置光线投射器,如下所示:

    raycaster.setFromCamera( mouse, camera );
    

    然后,光线投射器已准备好与您的场景进行交叉测试。

    【讨论】:

    • 我将如何实现 css2drenderer?请帮忙!
    • 抱歉,没有人会为您提供完整的解决方案。你必须自己弄清楚如何使用CSS2DRenderer。提到的示例应该提供足够的代码来研究逻辑。
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多