manim 中的三維視角

轩脉刃發表於2024-08-18

今天研究了一下 manim 中的 ThreeDAxes 和 set_camera_orientation

這裡記錄一下視角。

manim 中的 3D 座標系是笛卡爾的三維座標系,屬於右手座標系,即右手的大拇指,食指,中指垂直,大拇指指向 x 軸,食指指向 Y 軸,中指指向 z 軸。

而在初始化 3D 座標系,x 軸指向螢幕下方,y 軸是指向螢幕左方,z 軸指向螢幕外部(指向使用者位置),如下列方向。

     		    / z
     		  /
  原點   /_____ y
       |
       |
     	 | x

同時 我們需要設定 相機位置

self.set_camera_orientation(phi=0 *DEGREES, theta=-90 * DEGREES, gamma = 0 * DEGREE, focal_distance = 5)

這裡相機的位置幾個引數

  • phi:代表原點到相機位置組成的直線與 z 軸正向的夾角。為 0 則代表相機位置在 z 軸的正向延展線上。為 30 則代表在以 z 軸為軸心的錐形表面上。
  • focal_distance: 代表相機位置和原點的距離,結合focal_distance 和 phi,就將相機位置定義在錐形的某個曲線上。
  • theta: 代表相機位置在曲線上圍繞 z 軸旋轉的角度。在旋轉的時候,也需要考慮相機本身的正上方,也會隨著旋轉角度而變化。為 0 則代表位置在 x 軸正向方向,相機正上方朝向原點 。為 30 則代表圍繞 z 軸右邊旋轉 30 度,相機正上方朝向原點。
  • gamma:代表相機的正上方的旋轉角度。90 表示向右側自旋 90 度。

這裡需要理解一些例子才能真正理解這幾個引數。

例子 1:
self.set_camera_orientation(phi=0 *DEGREES, theta=-90 * DEGREES, gamma = 0 * DEGREE, focal_distance = 5) 這個看到的形式是什麼樣子的?

答:
相機位置是在z 軸正向上,且相機原本正上方朝向 x 軸負向,圍繞 z 軸左轉 90 度,那麼正上方朝向 y 軸正向,x 軸在相機右側,z 軸直接看不到。
這就是我們平時正常的 2D 視角。看到的 x 軸向右,y 軸向上。
例子 2:
self.set_camera_orientation(phi=0 *DEGREES, theta=0 * DEGREES, gamma = 0 * DEGREE, focal_distance = 5) 這個看到的形式是什麼樣子的?

答:
相機位置是在z 軸正向上,相機正上方朝向 x 軸負向,且自己沒有任何自旋。
這裡也會看到一個 2D 視角,不過 x 軸是向下的,y 軸向右。
例子 3:
self.set_camera_orientation(phi=0 *DEGREES, theta=0 * DEGREES, gamma = 90 * DEGREE, focal_distance = 5) 這個看到的形式是什麼樣子的?

答:
相機位置是在z 軸正向上,且相機原本正上方朝向 x 軸負向,雖然圍繞 z 軸沒有轉。但是相機自己進行旋轉,向右邊自旋 90 度,相機的正上方就朝向了 y 軸正向。
和例子 1 一樣,這時候我們就看到的 x 軸向右,y 軸向上的 2D 視角。
例子 4:
self.set_camera_orientation(phi=70 *DEGREES, theta=30 * DEGREES, gamma = 0 * DEGREE, focal_distance = 5) 這個看到的形式是什麼樣子的?

答:
相機位置是在於 z 軸正向查 70 度,且距離為 5 的環形軌道上,初始位置在 x 軸正向上,圍繞 z 軸旋轉30 度,相機位置在三維空間中 x,y,z 都是正值的位置。而相機正上方朝向原點方向。
這就形成一種俯視且斜視z 軸的視角。有一種全域性感。

相關文章