【发布时间】:2017-01-11 19:30:08
【问题描述】:
以项目 A-Frame Dominoes 为例,我正在创建一个基本的 A-Frame 应用程序,当按下 Vive 触发器时会生成对象。
我可以让新生成的对象在触发时匹配 Vive 的控制器位置,但是我无法找到一种方法来匹配新对象的旋转与控制器的旋转。
这是我尝试过的:
onTriggerDown: function () {
var sceneEl = d3.select(this.el.sceneEl);
var controllerWorldPosition = this.el.object3D.getWorldPosition();
var controllerWorldRotation = this.el.object3D.getWorldRotation();
sceneEl.append('a-obj-model')
.attr('id', 'base-street-children')
.attr('scale', '0.01 0.01 0.01')
.attr('position', controllerWorldPosition)
.attr('rotation', controllerWorldRotation)
.attr('src', '#base-street-obj')
.attr('mtl', '#base-street-mtl');
},
使用 JavaScript 设置新对象的旋转有什么特别之处吗?
【问题讨论】:
-
你能检查一下世界位置/旋转值是否正确吗?一看就对了。远景可能是将 Vector3 转换为普通的 {x, y, z} JavaScript 对象。
-
它们看起来确实正确,并且我已将日志记录添加到函数中,以将旋转作为 js 对象和 x、y 和 z 的字符串欧拉值吐出。
rotation: THREE.Euler_order: NaN_x: 0.9155754789964565_y: 0.40301867851568707_z: -0.606638077169057order: (...)x: (...)y: (...)z: (...)__proto__: Objectrotation: 0.9155754789964565 0.40301867851568707 -0.606638077169057position: THREE.Vector3x: -0.5138129591941833y: 0.35001492500305176z: -0.3904404938220978__proto__: Object OBJLoader.js:558 OBJLoader: 1.000ms -
我尝试从欧拉旋转的字符串组件中设置新对象的旋转属性,但也没有成功。这是代码:
.attr('rotation', controllerWorldRotation._x + ' ' + controllerWorldRotation._y + ' ' + controllerWorldRotation._z)
标签: javascript three.js rotation aframe