Oblicz obroty, aby spojrzeć na punkt 3D?

Muszę obliczyć 2 kąty (odchylenie i nachylenie), aby obiekt 3D był skierowany w stronę dowolnego punktu 3D. Obroty te są znane jako obroty „Eulera”, ponieważ po pierwszym obrocie (powiedzmy Z, na podstawie poniższego rysunku) oś Y również obraca się wraz z obiektem.

To jest kod, którego używam, ale nie działa w pełni. Gdy na płaszczyźnie podłoża (Y = 0) obiekt prawidłowo obraca się w kierunku punktu, ale gdy tylko przesunę punkt w górę w Y, obroty nie wyglądają prawidłowo.

// x, y, z represent a fractional value between -[1] and [1]
// a "unit vector" of the point I need to rotate towards

yaw = Math.atan2( y, x )
pitch = Math.atan2( z, Math.sqrt( x * x + y * y ) )

Czy wiesz, jak obliczyć kąty 2 Eulera, biorąc pod uwagę punkt?

Zdjęcie poniżej pokazuje, jak się obracam. To są kąty, które muszę obliczyć. (Jedyna różnica polega na tym, że obracam obiekt w kolejności X, Y, Z, a nie Z, Y, X)

pic http://i53.tinypic.com/33lo6jp.jpg

To jest mój system.

układ współrzędnych to x = w prawo, y = w dół, z = dalej w tyłobiekt jest domyślnie ustawiony na (0,0,1), który jest zwrócony do tyłuobroty są w kolejności X, Y, Z, gdzie obrót na X jest skokiem, Y jest odchyleniem, a Z jest rolką

questionAnswers(4)

yourAnswerToTheQuestion