我必须仅使用场景中的变换控件在XY方向上仅显示两个箭头或变换对象。
答案 0 :(得分:2)
通常情况下,我会问你到目前为止所尝试的内容,但没有关于此控件的文档,如果你不知道这是一个相当复杂的对象你正在寻找什么......
假设您有一个名为TranformControls
的{{1}}。
control
是一个数组,代表各种" gizmos",索引control.children
正在翻译。那" gizmo"也有3个孩子,但只有第一个与这个答案有关。所以,我们不是在看0
,它也有孩子,但这就像我们一样深,因为这些孩子是代表各种轴控制的网格。作为参考,我们只会查看:control.children[0].children[0]
。
TransformControls.js
列出了他们的设置配置,如下所示:
control.children[0].children[0].children
控件采用这些定义并按顺序将它们添加到//three.js r89
this.handleGizmos = {
X: [
[new THREE.Mesh(arrowGeometry, new GizmoMaterial({
color: 0xff0000
})), [0.5, 0, 0],
[0, 0, -Math.PI / 2]
],
[new THREE.Line(lineXGeometry, new GizmoLineMaterial({
color: 0xff0000
}))]
],
Y: [
[new THREE.Mesh(arrowGeometry, new GizmoMaterial({
color: 0x00ff00
})), [0, 0.5, 0]],
[new THREE.Line(lineYGeometry, new GizmoLineMaterial({
color: 0x00ff00
}))]
],
Z: [
[new THREE.Mesh(arrowGeometry, new GizmoMaterial({
color: 0x0000ff
})), [0, 0, 0.5],
[Math.PI / 2, 0, 0]
],
[new THREE.Line(lineZGeometry, new GizmoLineMaterial({
color: 0x0000ff
}))]
],
XYZ: [
[new THREE.Mesh(new THREE.OctahedronGeometry(0.1, 0), new GizmoMaterial({
color: 0xffffff,
opacity: 0.25
})), [0, 0, 0],
[0, 0, 0]
]
],
XY: [
[new THREE.Mesh(new THREE.PlaneBufferGeometry(0.29, 0.29), new GizmoMaterial({
color: 0xffff00,
opacity: 0.25
})), [0.15, 0.15, 0]]
],
YZ: [
[new THREE.Mesh(new THREE.PlaneBufferGeometry(0.29, 0.29), new GizmoMaterial({
color: 0x00ffff,
opacity: 0.25
})), [0, 0.15, 0.15],
[0, Math.PI / 2, 0]
]
],
XZ: [
[new THREE.Mesh(new THREE.PlaneBufferGeometry(0.29, 0.29), new GizmoMaterial({
color: 0xff00ff,
opacity: 0.25
})), [0.15, 0, 0.15],
[-Math.PI / 2, 0, 0]
]
]
};
,这样组成X轴控件的网格就是索引0和1。
这意味着要关闭X轴控制,您需要设置:
control.children[0].children[0].children
同样,要关闭YZ平面控制,您可以设置:
control.children[0].children[0].children[0].visible = false;
control.children[0].children[0].children[1].visible = false;
设置这些网格的可见性就足够了,因为用于确定您正在使用哪个控件的control.children[0].children[0].children[8].visible = false;
将忽略不可见的网格物体。随着网格的消失,您还会删除用户对该轴/平面可转换的了解。