我必须显示只有两个箭头或变换对象的XY方向上只使用变换控制与在现场。
23c0lvtd1#
假设您有一个名为control的TranformControls。control.children是一个表示各种“gizmo”的数组,索引0被转换。那个“小发明”也有3个孩子,但只有第一个与这个答案有关。所以我们不是在看control.children[0].children[0],它也有子对象,但这是我们要深入的,因为这些子对象是代表各种轴控件的网格。作为参考,我们将只关注:control.children[0].children[0].children。TransformControls.js列出了如下设置配置:
control
TranformControls
control.children
0
control.children[0].children[0]
control.children[0].children[0].children
TransformControls.js
//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] ] ] };
该控件接受这些定义,并按顺序将它们添加到control.children[0].children[0].children中,以便组成X轴控件的网格索引为0和1。这意味着要关闭X轴控制,您需要设置:
control.children[0].children[0].children[0].visible = false; control.children[0].children[0].children[1].visible = false;
同样,要禁用YZ平面控件,可以设置:
control.children[0].children[0].children[8].visible = false;
设置这些网格的可见性就足够了,因为用于确定您正在使用哪个控件的raycaster将忽略不可见的网格。随着网格的消失,用户也不再知道该轴/平面是可变换的。
raycaster
ghg1uchk2#
transformControl.showX = true transformControl.showY = true transformControl.showZ = false
2条答案
按热度按时间23c0lvtd1#
假设您有一个名为
control
的TranformControls
。control.children
是一个表示各种“gizmo”的数组,索引0
被转换。那个“小发明”也有3个孩子,但只有第一个与这个答案有关。所以我们不是在看control.children[0].children[0]
,它也有子对象,但这是我们要深入的,因为这些子对象是代表各种轴控件的网格。作为参考,我们将只关注:control.children[0].children[0].children
。TransformControls.js
列出了如下设置配置:该控件接受这些定义,并按顺序将它们添加到
control.children[0].children[0].children
中,以便组成X轴控件的网格索引为0和1。这意味着要关闭X轴控制,您需要设置:
同样,要禁用YZ平面控件,可以设置:
设置这些网格的可见性就足够了,因为用于确定您正在使用哪个控件的
raycaster
将忽略不可见的网格。随着网格的消失,用户也不再知道该轴/平面是可变换的。ghg1uchk2#