トップページ > .CELXスクリプトガイド > observerオブジェクト-視点移動

observerオブジェクト - 視点移動


指定した天体に移動したりなど、視点を扱うオブジェクトです。

observer:goto(天体・位置指定)


observer:goto(object/positon:target[, number:duration, start_inter, end_inter])
指定した天体(objectオブジェクトを指定した場合)、あるいは位置(positionオブジェクトを指定した場合)に移動します。
※ 次の視点の動作を伴うコマンドを実行する前にwaitコマンドで継続時間以上待つ必要があります。そうしなければコマンドが実行されません。
object:getpositionコマンドを使用して移動した場合、objectオブジェクトを指定して移動する場合とは異なり、天体の中心に移動してしまいます。
target: 移動先の天体、または位置を指定します。
duration[オプション]: 移動するのにかける時間。デフォルトは5[秒]です。
start_inter[オプション]: ?
end_inter[オプション]: ?
例:
-- 地球へ移動
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
obs:goto(earth, 10) -- 移動

observer:goto(テーブル指定)


observer:gotoparams(table:gotoparams)
テーブルによりパラメータを設定する事により多彩な動作ができます。
gotoparams: 移動パラメータを含んだテーブル。
キーは以下の値が設定できます。
gotoparams.duration: 移動時間(数値)
gotoparams.from: 出発点の位置(positionオブジェクト)
gotoparams.to: 到着点の位置(positionオブジェクト)
gotoparams.initialOrientation: 初期の視点方向(rotationオブジェクト)
gotoparams.finalOrientation: 最終的な視点方向(rotationオブジェクト)
gotoparams.startInterpolation: ?
gotoparams.endInterpolation: ?
gotoparams.accelTime: ?
※ 次の視点の動作を伴うコマンドを実行する前にwaitコマンドで継続時間以上待つ必要があります。そうしなければコマンドが実行されません。
例:
-- 地球へ移動
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
obs:gotoparams(earth, 10) -- 移動

observer:gotolonglat


observer:gotolonglat(object:target[, number:longitude, number:latitude, number:distance, number:duration])
指定した天体の指定した緯度・経度・距離へ移動します。
target: 移動先の天体
longitude[オプション]: 経度をラジアンで指定します。デフォルトは0です。
latitude[オプション]: 緯度をラジアンで指定します。デフォルトは0です。
distance[オプション]: 天体の中心からの距離を指定します。単位は[km]。デフォルトは天体の半径の5倍の長さです。
duration[オプション]: 移動時間です。デフォルトは5[秒]です。
度をラジアンに変換するにはmath.rad(...)を使用してください。
※ 次の視点の動作を伴うコマンドを実行する前にwaitコマンドで継続時間以上待つ必要があります。そうしなければコマンドが実行されません。
例:
-- 地球上のある地点(三鷹)に移動し、地平線を正面に
obs = celestia:getobserver() -- observerオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:synchronous(earth) -- 地球に自転同期で追尾
obs:gotolonglat(earth, math.rad(139.541), math.rad(35.6725), earth:radius()+0.05, 5) -- 三鷹へ移動
wait(6) -- 移動時間の5秒+一息つく1秒
v = celestia:newvector(1, 0, 0) -- vectorオブジェクトを生成
rot = celestia:newrotation(v, -math.pi/2) -- rotationオブジェクトを生成
obs:rotate(rot) -- 地平線が正面(空が上)になるように回転

observer:gotolocation


observer:gotolocation(positon:target[, number:duration])
positionオブジェクトを使用して指定した場所へ移動します。
移動先は現在の追尾モードに依存します。すなわち、追尾モードや参照天体により同じpositionオブジェクトでも移動先が異なります。
target: 移動先の天体
duration[オプション]: 移動時間です。デフォルトは5[秒]です。
※ 次の視点の動作を伴うコマンドを実行する前にwaitコマンドで継続時間以上待つ必要があります。そうしなければコマンドが実行されません。
例:
-- 名古屋上空3000kmへ移動
dec = 35.18 -- 緯度
ra = 136.907 -- 経度
distance = 3000 -- 距離

obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:synchronous(earth) -- 地球に自転動機で追尾

-- 距離を計算。半径に距離を足した後マイクロ光年に変換
r = (earth:radius() + distance) / 9460730.4725808

-- 極座標-直交座標変換
x = -r * math.cos(math.rad(dec))*math.cos(math.rad(ra))
y = r * math.sin(math.rad(dec))
z = r * math.cos(math.rad(dec))*math.sin(math.rad(ra))

pos = celestia:newposition(x, y, z) -- positionオブジェクトを設定
obs:gotolocation(pos,2) -- 移動
wait(2)
obs:center(earth, 1) -- 名古屋を中心に

observer:gotodistance


observer:gotodistance(object:target[, number:distance, number:duration])
指定した距離を取って天体に近づきます。
target: 移動先の天体
distance[オプション]: 天体との距離です。中心からの距離になります。表面からの距離にするには、天体の半径を足してください。
duration[オプション]: 移動時間です。デフォルトは5[秒]です。
※ 次の視点の動作を伴うコマンドを実行する前にwaitコマンドで継続時間以上待つ必要があります。そうしなければコマンドが実行されません。
例:
-- 地球上空50000kmに移動
obs = celestia:getobserver() -- observerオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:gotodistance(earth, earth:radius() + 50000, 3) -- 移動

observer:gotosurface


observer:gotosurface(object:target[, number:duration])
天体表面へ移動します。指定した天体に対しCtrl+Gを押したのと同様の動作をします。
コマンド実行後は追尾モードが自動的にSync Orbit(自転同期)になります。
target: 移動先の天体
duration[オプション]: 移動時間です。デフォルトは5[秒]です。
※ 次の視点の動作を伴うコマンドを実行する前にwaitコマンドで継続時間以上待つ必要があります。そうしなければコマンドが実行されません。
例:
-- 地球表面に移動
obs = celestia:getobserver() -- observerオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:gotosurface(earth) -- 移動

observer:center


observer:center(object:target[, number:duration])
天体を画面中央へ持ってきます。指定した天体に対しCキーを押したのと同様の動作をします。
target:中心へ移動させるの天体
duration[オプション]: 移動時間です。デフォルトは5[秒]です。
※ 次の視点の動作を伴うコマンドを実行する前にwaitコマンドで継続時間以上待つ必要があります。そうしなければコマンドが実行されません。
例:
-- 地球を画面中心に
obs = celestia:getobserver() -- observerオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:center(earth, 3) -- 画面中央へ

observer:centerorbit


observer:centerorbit(object:target[, number:duration])
現在追尾中の天体との距離・画面位置を保ったまま指定した天体が画面中央になるように視点を移動させます。
Shift+Cキーを押したのと同様の動作をします。
target:中心へ移動させる天体
duration[オプション]: 移動時間です。デフォルトは5[秒]です。
※ 次の視点の動作を伴うコマンドを実行する前にwaitコマンドで継続時間以上待つ必要があります。そうしなければコマンドが実行されません。
例:
-- 視点-地球-火星を一直線に
obs = celestia:getobserver() -- observerオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:centerorbit(earth, 3) -- 画面中央へ
wait(3)
mars = celestia:find("Sol/Mars") -- 火星のobjectオブジェクトを取得
celestia:select(mars) -- 火星を選択
obs:centerorbit(mars, 3) -- 画面中央へ

observer:travelling


boolean observer:travelling()
gotoやcenter等で視点移動中の場合にtrueを返します。
例:
-- 金星へ移動している間、メッセージを表示
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
venus = celestia:find("Sol/Venus") -- 金星のobjetオブジェクトを取得
obs:goto(venus, 20) -- 20秒かけて移動
while obs:travelling() do
	-- obs:travelling()がtrueの間はこのループの中を実行し続けます。
	celestia:flash("Moving to Venus.")
	wait(0.1)
end

observer:cancelgoto


observer:cancelgoto()
gotoやcenter等での視点移動状態を解除します。
例:
--

observer:follow


observer:follow(object:target)
指定した天体に春分点同期で追尾します。
frameオブジェクトでeclipticalを選択し、参照天体を設定した場合と同様です。
target:追尾する天体
例:
-- 地球に春分点同期で追尾
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:follow(earth) -- 春分点同期で追尾
obs:goto(earth, 10) -- 移動

observer:synchronous


observer:synchronous(object:target)
指定した天体に自転同期で追尾します。
frameオブジェクトでplanetographicを選択し、参照天体を設定した場合と同様です。
target:追尾する天体
例:
-- 地球に自転同期で追尾
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:synchronous(earth) -- 自転同期で追尾
obs:goto(earth, 10) -- 移動

observer:chase


observer:chase(object:target)
指定した天体に公転同期(Chaseモード)で追尾します。
frameオブジェクトでchaseを選択し、参照天体を設定した場合と同様です。
target:追尾する天体
例:
-- 地球に公転同期で追尾
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:chase(earth) -- 公転同期で追尾
obs:goto(earth, 10) -- 移動

observer:lock


observer:lock(object:target)
指定した2つの天体に同期して追尾します。
frameオブジェクトでlockを選択し、参照天体・目的天体を設定した場合と同様です。
target:追尾する天体
事前に他の追尾モードで1つ目の天体を追尾している必要があります。
例:
-- 地球と月に参照して追尾
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
moon = celestia:find("Sol/Earth/Moon") -- 月のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:follow(earth) -- 春分点同期で追尾
obs:goto(earth, 3) -- 移動
wait(3)
obs:lock(moon) -- 2天体同期で追尾

observer:track


observer:track(object:target)
指定した天体を画面中央に保持します。
target:中央保持する天体
状態を解除する場合は、observer:track(nil)としてください。
例:
-- 地球・月を画面中央に保持
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjectオブジェクトを取得
moon = celestia:find("Sol/Earth/Moon") -- 月のobjectオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:follow(earth) -- 春分点同期で追尾
obs:goto(earth, 3) -- 移動
wait(3)
obs:track(earth) -- 地球を画面中央に保持
obs:goto(moon, 3) -- 月へ移動
wait(3)
celestia:select(moon) -- 月を選択
wait(1)
obs:track(nil) -- 中央保持を解除
obs:center(moon, 3) -- 月を画面中央へ
wait(3)
obs:track(moon) -- 月を画面中央に保持

observer:setposition


observer:setposition(position:pos)
現在の視点の位置を設定します。universal座標系での位置となります。
pos:設定する位置(positionオブジェクト)
例:
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
pos = celestia:newposition(3000, 0, 0) -- 太陽から秋分点方向へある程度離れた場所を設定
obs:setposition(pos) -- 移動

observer:getposition


position observer:getposition()
現在の視点の位置を取得します。universal座標系での位置となります。
例:
--

observer:setorientation


observer:setorientation(rotation:rot)
現在の視点の回転方向を取得します。universal座標系での方向となります。
rot:設定する回転方向(rotationオブジェクト)
例:
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
pos = celestia:newposition(3000, 0, 0) -- 太陽から秋分点方向へある程度離れた場所を設定
rot = celestia:newrotation(1, 0, -1, 0) -- 秋分点方向
obs:setorientation(pos) -- 移動
wait(1)
obs:setorientation(rot) -- 回転

observer:getorientation


rotation observer:getorientation()
現在の視点の回転方向を取得します。universal座標系での方向となります。
例:
--

observer:rotate


observer:rotate(rotation:rot)
視点を指定したrotationオブジェクト分だけ回転させます。
rot:設定する回転方向(rotationオブジェクト)
例:
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
rot = celestia:newrotation(0, 0, 1, 0) -- 振り返る
obs:rotate(rot) -- 回転

observer:lookat


observer:lookat([position:from, ]position:to, vector:up)
2つの視点を結んだ方向を向かせる事ができます。
from[オプション]:始点。デフォルトは現在の位置です。
to:終点。
up:向いた時の回転方向(?)
(1, 0, 0)で春分点が上に、(0, 1, 0)で黄道の北極が上に(黄道面が水平に)、(0, 1, 0)で黄道面が垂直になります。

例:
obs = celestia:getobserver()
earth = celestia:find("Sol/Earth")
pos = obs:getposition()
v = celestia:newvector(0, 1, 0)
obs:lookat(pos, v)

observer:gettime


number observer:gettime()
現在の視点のシミュレーション時刻をユリウス日で取得します。
現在のところはcelestia:gettimeと同様のようです。(?)
例:
--

observer:getspeed


number observer:getspeed()
現在の視点の速度を取得します。単位は[マイクロ光年(10-6光年)/秒]。
例:
--

observer:setspeed


observer:setspeed(number:speed)
現在の視点の速度を設定します。単位は[マイクロ光年(10-6光年)/秒]。
すぐに設定した速度にはなりません。例えば、1光年/秒の速さからストップする場合、十数秒かかります。
例:
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
sol = celestia:find("Sol") -- 太陽のobjetオブジェクトを取得
celestia:select(sol)
obs:goto(sol, 3)
wait(3) -- 太陽へ移動

obs:setspeed(0) -- 一旦速度を0にする
for i = 0, 10000000, 100000 do -- 0から1000まで10ずつ速度を上げる
	obs:setspeed(i)
	wait(0.1)
end
wait(3)
for i = 10000000, 0, -100000 do -- 1000から0まで10ずつ速度を下げる
	obs:setspeed(i)
	wait(0.1)
end
obs:center(sol, 3) -- 太陽を中心に
wait(3)
obs:goto(sol, 3) -- gotoコマンドで戻る

observer:getsurface


string observer:getsurface()
現在使用している表面テクスチャを取得します。"limit of knowledge等が該当します。"
例:
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
mercury = celestia:find("Sol/Mercury") -- 水星のobjetオブジェクトを取得
obs:goto(mercury, 3) -- 移動
wait(4)
-- limit of knowledgeテクスチャを使用していればその旨を表示
if obs:getsurface() == "limit of knowledge" then
	celestia:flash("You are already using limit of knowledge texture.")
end

observer:setsurface


string observer:setsurface()
使用する表面テクスチャを設定します。"limit of knowledge"等が該当します。
例:
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
mercury = celestia:find("Sol/Mercury") -- 水星のobjetオブジェクトを取得
obs:goto(mercury, 3) -- 移動
wait(4)
-- limit of knowledgeテクスチャを使用していなければ切り替える
if obs:getsurface() == "limit of knowledge" then
	celestia:flash("You are already using limit of knowledge texture.")
else 
	celestia:flash("Switching to limit of knowledge texture.")
	obs:setsurface("limit of knowledge")
end

observer:getlocationflags


table observer:getlocationflags()
地名の種類によるON/OFFをテーブルで取得します。
返されるキーは以下を参照してください。
キー詳細キー詳細キー詳細
city都市rupesmensa
observatory観測所tesserarima
landingsite着陸地点regiorima
craterクレーターchaosundae
vallis峡谷terrareticulum
mons山地astrumplanitia
planumcoronalinea
chasmadorsumfluctus
paterafossafarrum
marecatenaotherその他
※ 全ての種類が使われているわけではありません。
例:
--

observer:setlocationflags


observer:setlocationflags(table:locationflags)
地名表示状態を設定します。
observer:getrenderflagsobserver:setrenderflagsなども参考にしてください。
locationflags: 地名表示の状態
例:
--

observer:getfov


number observer:getfov()
現在の視野の広さを取得します。単位は[ラジアン]。
例:
--

observer:setfov


observer:setfov(number:fov)
視野の広さを設定します。単位は[ラジアン]。
例:
-- 倍率を徐々に拡大
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjetオブジェクトを取得
venus = celestia:find("Sol/Venus") -- 金星のobjetオブジェクトを取得
celestia:select(earth) -- 地球を選択
obs:goto(earth, 3) -- 地球を選択
wait(3)
celestia:select(venus) -- 金星を選択
fov = obs:getfov() -- 現在の視野の広さを取得
obs:center(venus, 3) -- 金星を中心に
wait(3)
-- 拡大
for i = 1, 1000, 1 do
	obs:setfov(fov / i)
	wait(0.01)
end

observer:getframe


frame observer:getframe()
現在の視点のframeオブジェクトを取得します。
frameオブジェクトの説明も参照してください。
例:
--

observer:setframe


observer:setframe(frame:f)
現在の視点のframeオブジェクトを設定します。
frameオブジェクトの説明も参照してください。
例:
obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
earth = celestia:find("Sol/Earth") -- 地球のobjetオブジェクトを取得
f = celestia:newframe("planetographic", earth) -- 地球に自転同期で追尾(Sync Orbitモード)
obs:setframe(f)

observer:gettrackedobject


object observer:gettrackedobject()
1.5.0
現在中央保持中の天体を取得します。
中央保持中の天体が無い場合、nilではない空白の天体が返されます。
例:
-- 中央保持天体の名前を表示
while 1 do
	obs = celestia:getobserver() -- 視点のobserverオブジェクトを取得
	tracked = obs:gettrackedobject() -- 中央保持天体のobjetオブジェクトを取得
	trackedname = tracked:localname() -- 天体名取得
	if trackedname == "?" then -- 空白の天体の名前
		celestia:flash("中央保持天体はありません") -- 中央保持天体が無い場合
	else
		celestia:flash(trackedname .. "を中央保持中") -- 中央保持天体がある場合
	end
	wait(0.1)
end

トップページ > .CELXスクリプトガイド > observerオブジェクト - 視点移動