manim 中的三维视角
2024-08-18 09:46 轩脉刃 阅读(75) 评论(0) 编辑 收藏 举报今天研究了一下 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 轴的视角。有一种全局感。
实时了解作者更多技术文章,技术心得,请关注微信公众号“轩脉刃的刀光剑影”
本文基于署名-非商业性使用 3.0许可协议发布,欢迎转载,演绎,但是必须保留本文的署名叶剑峰(包含链接http://www.cnblogs.com/yjf512/),且不得用于商业目的。如您有任何疑问或者授权方面的协商,请与我联系。