首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将屏幕坐标转换为场景坐标

如何将屏幕坐标转换为场景坐标
EN

Stack Overflow用户
提问于 2017-05-10 13:42:19
回答 1查看 1.1K关注 0票数 0

我创建了一个带有要拖动的对象的a-scene。最终的目的正是aframe-单击-拖动组件所做的工作。不幸的是,这个组件与A帧的最后一个版本不兼容.

我创建了一个自定义组件。

代码语言:javascript
复制
AFRAME.registerComponent('draggable', {
    init: function () {
        /* Some code */
    }
});

我使用帧-鼠标-光标-组件来获取拖放对象上的mouseentermouseleave事件,并检测鼠标位置允许用户选择对象的时间。

我在document.body上添加了一个document.body,以了解何时开始拖动:

代码语言:javascript
复制
document.body.addEventListener('mousedown', function (e) {
    // start dragging
});

我不断更新一个全局变量,以便在发生mousemove时更新鼠标位置:

代码语言:javascript
复制
document.addEventListener('DOMContentLoaded', function () {
    document.body.addEventListener('mousemove', function (e) {
        window.mouseX = e.clientX;
        window.mouseY = e.clientY;
    });
});

这样,我就可以很容易地得到鼠标拖动的位置。但我不知道如何将鼠标在客户端上的位置转换为虚拟现实中的位置(仅限于2D计划,以使其成为可能)。

我通过使用来自a-camera中间的光标的扫描程序解决了这个问题,但是我想用mouse-cursor拖动对象,而这个组件没有一个扫描程序。

我还试图使用一些数学将鼠标坐标转换为相对于相机的坐标集,但没有成功(主要是因为屏幕大小可能会有所不同)。

有什么解决办法?我想更新点击拖动或鼠标光标,但我不知道THREE.js.

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-10 21:16:19

有关示例,请参阅https://github.com/mayognaise/aframe-mouse-cursor-componenthttps://github.com/mrdoob/three.js/blob/dev/examples/js/controls/DragControls.jshttps://www.npmjs.com/package/aframe-click-drag-component

主要代码块如下:

代码语言:javascript
复制
    canvas.addEventListener( 'mousemove', function () {

      var mouse = new THREE.Vector2();

      var rect = canvas.getBoundingClientRect();

      mouse.x = ( (event.clientX - rect.left) / rect.width ) * 2 - 1;
      mouse.y = - ( (event.clientY - rect.top) / rect.height ) * 2 + 1;

      raycaster.setFromCamera( mouse, camera );
    }, false);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43894239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档