javascript Three.js变换控件-如何只显示两个箭头

bq3bfh9z  于 2023-06-28  发布在  Java
关注(0)|答案(2)|浏览(109)

我必须显示只有两个箭头或变换对象的XY方向上只使用变换控制与在现场。

23c0lvtd

23c0lvtd1#

  • 通常情况下,我会问你到目前为止尝试过什么,但没有此控件的文档,如果你不知道你在寻找什么,这是一个相当复杂的对象。

假设您有一个名为controlTranformControls
control.children是一个表示各种“gizmo”的数组,索引0被转换。那个“小发明”也有3个孩子,但只有第一个与这个答案有关。所以我们不是在看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将忽略不可见的网格。随着网格的消失,用户也不再知道该轴/平面是可变换的。

ghg1uchk

ghg1uchk2#

transformControl.showX = true
transformControl.showY = true
transformControl.showZ = false

相关问题