Celestia/Celx 脚本/CELX Lua 方法/CEL 命令 setorientation
外观
setorientation { angle <anglenumber> axis <axisvector> }
-- 或者 --
setorientation { ow <ownumber> ox <oxnumber> oy <oynumber> oz <oznumber> }
设置相机方向。如果你试图根据书签或 Cel://URL 复制位置,你还需要设置正确的坐标系、位置和其他参数。
参数
- angle <anglenumber>
- 角度(以度为单位)。无默认值。
此值可以从 Celestia 书签中获取,书签存储在 Celestia 目录下的 favorites.cel 文件中。 - axis <axisvector>
- 旋转向量 [ <xrot> <yrot> <zrot> ],无默认值。
此值可以从 Celestia 书签中获取,书签存储在 Celestia 目录下的 favorites.cel 文件中。
<xrot>、<yrot> 和 <zrot> 是相机方向的欧拉角或角轴表示。可以将其视为航空中的俯仰、偏航和滚动。
-- 或者 --
参数
- ow <ownumber>
- 表示 Cel://URL 存储的角度。它从以下 Cel://URL 值中获取:&ow。无默认值。
- ox <oxnumber>
- 表示 Cel://URL 存储的x 轴。它从以下 Cel://URL 值中获取:&ox=。无默认值。
- oy <oynumber>
- 表示 Cel://URL 存储的y 轴。它从以下 Cel://URL 值中获取:&oy=。无默认值。
- oz <oznumber>
- 表示 Cel://URL 存储的z 轴。它从以下 Cel://URL 值中获取:&oz=。无默认值。
CELX 等效值-1
基于参数列表-1 以及 celestia:newvector()、celestia:newrotation(axis-angle) 和 observer:setorientation() 方法。
- 创建一个新的向量,包含此旋转的轴 [ <xrot> , <yrot> , <zrot> ],并存储在 "vec" 中。
vec = celestia:newvector( <xrot>, <yrot>, <zrot> )
- 将 <anglenumber> 从度转换为弧度并存储在 "angle" 中。
"angle" = math.pi / 180 * <anglenumber> (= 3.14159265 / 180 * <anglenumber> )。
Lua 的 math.rad( <anglenumber> ) 函数也可以用于此目的。
angle = math.rad( <anglenumber> )
- 创建一个新的旋转(即四元数),围绕此旋转的指定轴在 "vec" 中旋转 "angle",并存储在 "rot" 中。
rot = celestia:newrotation(vec, angle)
- 获取活动视图的观察者实例,并根据创建的新的旋转 "rot" 旋转观察者。
obs = celestia:getobserver() obs:setorientation(rot)
总结
vec = celestia:newvector( <xrot>, <yrot>, <zrot> ) angle = math.rad( <anglenumber> ) rot = celestia:newrotation(vec, angle) obs = celestia:getobserver() obs:setorientation(rot)
CELX 等效值-2
基于参数列表-2 以及 celestia:newrotation() 和 observer:setorientation() 方法。
- 从四个标量值创建一个新的旋转(即四元数)并存储在 rot 中。
<ownumber>: 新旋转的 OW 分量,作为一个从 cel 风格 URL &ow= 获取的数字值。
<oxnumber>: 新旋转的 OX 分量,作为一个从 cel 风格 URL &ox= 获取的数字值。
<oynumber>: 新旋转的 OY 分量,作为一个从 cel 风格 URL &oy= 获取的数字值。
<oznumber>: 新旋转的 OZ 分量,作为一个从 cel 风格 URL &oz= 获取的数字值。
rot = celestia:newrotation( <ownumber>, <oxnumber>, <oynumber>, <oznumber> )
- 获取活动视图的观察者实例,并根据创建的新的旋转 "rot" 旋转观察者。
obs = celestia:getobserver() obs:setorientation(rot)
总结
rot = celestia:newrotation( <ownumber>, <oxnumber>, <oynumber>, <oznumber> ) obs = celestia:getobserver() obs:setorientation(rot)
示例
根据参数列表-1 设置相机方向
CEL
setorientation { angle 0.945208 axis [ 0.81466 -0.570975 -0.101573 ] }
基于参数列表-1 的CELX
vec = celestia:newvector(0.81466, -0.570975, -0.101573) angle = math.rad(0.945208) rot = celestia:newrotation(vec, angle) obs = celestia:getobserver() obs:setorientation(rot)
示例
根据参数列表-2 设置相机方向
CEL
setorientation { ow 0.090610 ox -0.494683 oy 0.860207 oz -0.084397 }
基于参数列表-2 的CELX
rot = celestia:newrotation(0.090610, -0.494683, 0.860207, -0.084397) obs = celestia:getobserver() obs:setorientation(rot)