在 aframe 中寻找一种方法,以便在标记上渲染时通过触摸旋转和缩放模型



我正在用aframe 0.8.2加载这个Collada(DAE(模型,并使用aframe-ar将其显示在Hiro标记上:

<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<script src="https://aframe.io/releases/0.8.2/aframe.min.js"></script>
<script src="https://cdn.rawgit.com/jeromeetienne/AR.js/1.5.5/aframe/build/aframe-ar.js"></script>
<body style='margin : 0px; overflow: hidden;'>
<a-scene embedded arjs='trackingMethod: best; debugUIEnabled: false;'>
<!--a-marker type='pattern' url='https://rawgit.com/germanviscuso/AR.js/master/data/data/patt.gafas'-->
<a-marker preset='hiro'>
<a-collada-model src="url(https://aframe.io/aframe/examples/showcase/shopping/man/man.dae)"></a-collada-model>
</a-marker>
<a-camera-static/>
</a-scene>
</body>

代码笔:https://codepen.io/germanviscuso/pen/KRMgwz

我想知道如何通过在手机浏览器上使用滑动手势来添加控件以在其 Y 轴上旋转它(相对于标记(,并在执行捏合手势时动态缩放模型。理想情况下,当我在笔记本电脑中进行测试时,如果它也可以与鼠标/触摸板一起使用,那就太好了,但在手机上触摸就足够了。

通用控件可以处理此问题吗?我能看到任何例子吗?这必须在模型相对于标记动态渲染(AR跟踪(时起作用。

任何帮助不胜感激,谢谢!

我不会使用基于光线投射器的"本机"控件。相反,我会使用任何 js 手势检测库。在这个例子中,我使用了锤子.js。

锤.js注册一个物体,当检测到panswipepinch手势时发出事件。我已经在 a 帧组件中使用侦听器创建了对象。

  1. 当检测到pan时,我只需根据方向旋转模型(2 - 左,4 - 右,8 - 向上,16 - 向下(

  2. 当检测到pinch时,我会根据事件值更改刻度,您可以乘以任何因子。组件如下:

    AFRAME.registerComponent("foo",{ init:function(( { var element = document.querySelector('body'(; this.marker = document.querySelector('a-marker'( var model = document.querySelector('a-collada-model'(; var 锤子时间 = 新锤子(元素(; var pinch = new Hammer.Pinch((;捏合不是识别器中的默认设置 锤子时间.添加(捏(;将其添加到管理器实例

    hammertime.on('pan', (ev) => {
    let rotation = model.getAttribute("rotation")
    switch(ev.direction) {
    case 2:
    rotation.y = rotation.y + 4
    break;
    case 4:
    rotation.y = rotation.y - 4
    break;
    case 8:
    rotation.x = rotation.x + 4
    break;
    case 16:
    rotation.x = rotation.x - 4
    break;
    default:
    break;
    }
    model.setAttribute("rotation", rotation)
    });
    hammertime.on("pinch", (ev) => {
    let scale = {x:ev.scale, y:ev.scale, z:ev.scale}
    model.setAttribute("scale", scale);
    });
    

    } });

这里的工作故障。在我的示例中,我还检查标记是否可见,认为它可能很方便。

这里的工作示例

最新更新