Three.js - Jak obracać obiekt, aby spojrzeć na jeden punkt i orientować się w kierunku drugiego

Jestem nowym użytkownikiem three.js i ogólnie programowania 3d, więc może się to wydawać bardzo prostym pytaniem. W idealnej sytuacji mam nadzieję, że odpowiedź pomoże mi zrozumieć podstawowe zasady.

Mam obiekt, który musi „wskazać” w innym punkcie (w tym przypadku pochodzenie, dla uproszczenia), co można łatwo zrobić za pomocąObject3D.lookAt(point) funkcjonować. To ładnie wskazuje oś Z obiektu.

Chcę także obrócić mój obiekt, wywołanylooker, wokół swojej osi Z, tak że jego oś X wskazuje ogólnie na inny obiekt,refObj. Wiem, że oś X nie może wskazywać bezpośrednio narefObj chyba że obiekt ten powstaje pod kątem prostym względem początku. Chcę osi Xlooker leżeć na płaszczyźnie stworzonej przezorigin, refObj ilooker, jak pokazano poniżej:

Najprostszym sposobem wykonania rotacji wydaje się być modyfikacjalooker.rotation.z, ale nie wiem, jak obliczyć, jaka powinna być wartość.

Ogólnie chciałbym rozszerzoną wersjęlookAt funkcja, która pobiera drugą współrzędną, do której oś X byłaby zorientowana. Coś takiego:

function lookAtAndOrient(objectToAdjust, pointToLookAt, pointToOrientXTowards)
{
  // First we look at the pointToLookAt
  objectToAdjust.lookAt(pointToLookAt);

  // Then we rotate the object
  objectToAdjust.rotation.z = ??;
}

StworzyłemjsFiddle z powyższym przykładem

questionAnswers(1)

yourAnswerToTheQuestion