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)