изменить ось вращения

Я пользуюсь примером кода Учебник по преобразованию для поворота и изменения положения. Я столкнулся с парой проблем.

  1. Я хочу выполнить вращение на двери и окне. В настоящее время ось вращения проходит через центр. Как я могу изменить поворот объекта от оси, проходящей через его сторону.

  2. Для изменения положения> когда я меняю положение, скажем, для окна в любом направлении, оно перемещается, но видно на стене. Я хочу, чтобы он скрывался, когда окно сталкивается со стеной.


person Rohit Bohara    schedule 17.10.2017    source источник


Ответы (1)


1/ Вот фрагмент кода, который иллюстрирует, как вращать элементы (фрагменты). Более полный пример можно найти в этой статье: Управление поворотом компонентов для средства просмотра

rotateFragments (model, fragIdsArray, axis, angle, center) {

  var quaternion = new THREE.Quaternion()

  quaternion.setFromAxisAngle(axis, angle)

  fragIdsArray.forEach((fragId, idx) => {

    var fragProxy = this.viewer.impl.getFragmentProxy(
      model, fragId)

    fragProxy.getAnimTransform()

    var position = new THREE.Vector3(
      fragProxy.position.x - center.x,
      fragProxy.position.y - center.y,
      fragProxy.position.z - center.z)

    position.applyQuaternion(quaternion)

    position.add(center)

    fragProxy.position = position

    fragProxy.quaternion.multiplyQuaternions(
      quaternion, fragProxy.quaternion)

    if (idx === 0) {

      var euler = new THREE.Euler()

      euler.setFromQuaternion(
        fragProxy.quaternion, 0)

      this.emit('rotate', {
        dbIds: this.selection.dbIdArray,
        fragIds: fragIdsArray,
        rotation: euler,
        model
      })
    }

    fragProxy.updateAnimTransform()
  })
}

2/Когда вы преобразовываете геометрию, вы просто перемещаете треугольники, нет встроенной логики, которая будет скрывать компоненты, потому что они перекрываются, вам нужно будет реализовать это самостоятельно. Вы должны быть в состоянии найти код Three.js, который вычисляет, пересекаются ли две сетки (алгоритм пересечения треугольник-треугольник), и запускать его для компонента, который вы перемещаете, и всех стен вокруг. Вот кое-что, что может поставить вас в тупик: Как обнаружить столкновение в three.js ?

надеюсь, это поможет

person Philippe    schedule 17.10.2017