HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
1227
ken座標変換14解決


ken

リンク

2009/12/27(Sun) 12:07:10|NO.29551

地球儀には緯度と経度の線がありますがこれを地球儀の中心から見たように画面に表示させたい
のです。例えば地球儀の中心から北極方向を見ると経線は同心円、緯度線は放射状の線となって
表示されるはずですがどのようにすれば良いのでしょうか?見る方向と範囲を指定して表示したい
のです。ゲームをやったことがないのですがHGING3とかHSP3IMPのデモを見ていると簡単にできそう
に思えるのですがHGING3やHSP3IMPは使ったことがありません。
簡単なヒントだけでも御教示お願い致します。



この記事に返信する


KA

リンク

2009/12/27(Sun) 14:27:07|NO.29555

プラグインで出来るのかは別として、

立体角の知識と放物線等の円錐曲線が分かれば、自力で何とかできます。



GENKI

リンク

2009/12/27(Sun) 14:48:01|NO.29556

> ゲームをやったことがないのですがHGING3とかHSP3IMPのデモを見ていると簡単にできそう

HGING3…HGIMG3のことですね。
HGIMG3は主に3Dゲームを作成する際に使用されるプラグインです。
3D系のプラグインは他にEasy3Dというものもあります。また、モジュールならd3moduleがあります。どれも標準で付属しています。

各プラグインの効果は実際に使用されている作品を使ってみるのがいいでしょう。
HSPコンテストにたくさん投稿されていますので、3Dのものを探してプレイしてみてください。

なおHSP3IMPは用途が違うので3D関係には直接必要ありません。


さて、質問の意図は「球体のモデルを表示したい」…ということでしょうか?
もしそういうことでしたら、次のような流れで表示させることが出来ます。
1.「メタセコイア」でモデリング(3Dモデルを作成)。
2.HGIMG3やEasy3Dプラグインを使って表示させる。
見る方向や範囲も自由に設定できます。また、どんな形状のモデルであっても同じ手順です。

もし、自力で3Dモデルの座標を一つ一つ計算して表示させたいということでしたら、
また別途回答します。



ken

リンク

2009/12/27(Sun) 22:35:11|NO.29558

早速の回答ありがとうございます。

質問のしかたが間違っていたかもしれません。
やりたいことは640X480のウィンドウでXYとも5ドットが1度としてウィンドウの中心が北緯N度東経E度
のとき任意の地点北緯Nn東経Enを通る経線と緯度線はどのように描けば良いかということです。
高度な数学計算が必要と思われますが3Dプラグインを使えばこの計算をしなくてもいいのかなと
思ったのですが的外れですか?



GENKI

リンク

2009/12/28(Mon) 04:08:39|NO.29561

> 例えば地球儀の中心から北極方向を見ると経線は同心円、緯度線は放射状の線となって
> 表示されるはずですがどのようにすれば良いのでしょうか?

> やりたいことは640X480のウィンドウでXYとも5ドットが1度としてウィンドウの中心が北緯N度東経E度
> のとき任意の地点北緯Nn東経Enを通る経線と緯度線はどのように描けば良いかということです。

「最終的には何をしたいのか」具体的なものが何も見えてこないので適切な回答が出来ませんが、
これまでのものをまとめると、
 対象物(3Dモデル):地球儀表面
 視点:地球儀の中心
 注視点:北緯N度東経E度(地球儀表面の任意の場所)
 やりたいこと:以上の条件で経線と緯度線を描画する。
こういうことでしょうか。
プラネタリウム的なものでも作るのかな?

単純にそういう絵を表示したいのなら、HGIMG3、Easy3D、d3moduleを使ってください。
d3module以外は、テクスチャを使用することになると思うので、メタセコイアも習得する必要があります。


また、どうしてもウィンドウに表示したときの座標の数値がほしい場合は、各プラグインに用意されている命令を使用することで取得することも出来ます。


> 高度な数学計算が必要と思われますが3Dプラグインを使えばこの計算をしなくてもいいのかなと
> 思ったのですが的外れですか?

「この計算」を私が正しく理解できていないかもしれませんが…、
プラグインを使用すれば、高度な数学知識が無くとも多くのことが出来るようになります。「この計算」も容易でしょう。
先ずはサンプルスクリプトをご覧になって実行してみてください。(HSPアシスタントを使うと便利です。)



ken

リンク

2009/12/28(Mon) 19:34:25|NO.29577

GENKIさんありがとうございます。

これまでのものをまとめると、  対象物(3Dモデル):地球儀表面  視点:地球儀の中心  注視点:北緯N度東経E度(地球儀表面の任意の場所)  やりたいこと:以上の条件で経線と緯度線を描画する。 こういうことでしょうか。
まさにその通りです。

>プラネタリウム的なものでも作るのかな?
考えてみればプラネタリウムも同じですね。
プラネタリウムの場合も3Dモデルを使っているのでしょうか?

>どうしてもウィンドウに表示したときの座標の数値がほしい場合は
座標の数値もほしいです。

まずは地球儀のモデルを作るべきですか?



f(忘年中)

リンク

2009/12/28(Mon) 19:59:45|NO.29579

こんな普通にググれば拾えるような式、いちいち解説なんかしないぞう。

回転の公式
PI = 3.141592 (円周率)
Deg = 回転させる角度(度) 

X軸回転
Xx = x
Yx = y * cos(deg * (PI / 180.0)) + z * sin(deg * (PI / 180.0))
Zx =-y * sin(deg * (PI / 180.0)) + z * cos(deg * (PI / 180.0))

Y軸回転
Xy = x * cos(deg * (PI / 180.0)) - z * sin(deg * (PI / 180.0))
Yy = y
Zy = x * sin(deg * (PI / 180.0)) + z * cos(deg * (PI / 180.0))

Z軸回転
Xz = x * cos(deg * (PI / 180.0)) + y * sin(deg * (PI / 180.0))
Yz =-x * sin(deg * (PI / 180.0)) + y * cos(deg * (PI / 180.0))
Zz = z


画角計算
W  = 表示したい画面の大きさ XYで別にしてもよい
Deg = 画角 画角とは、視点から扇状に広がっていく「見える範囲」の角度の事
z  = 奥行き

ScreenX = x / (z * tan((Deg / 2) * (PI / 180))) * (W / 2))
ScreenY = y / (z * tan((Deg / 2) * (PI / 180))) * (W / 2))



ken

リンク

2009/12/28(Mon) 22:16:26|NO.29585

fさん

これはググって見つけた高度な数学計算式のようです。
これをどう使ったら良いのかわかりません。
HGIMG3プラグインがこの計算をやってくれるのではないかと思ったのですが・・・?



足利超神

リンク

2009/12/28(Mon) 22:58:20|NO.29586

3Dは表示のみで、計算などは自前でやりましょう。
標準命令の三角関数やE3dやHGIMG3などのベクトル計算をつかえば



足利超神

リンク

2009/12/28(Mon) 22:59:39|NO.29587

ひょっとして三角関数がわからないんですか?



SYAM

リンク

2009/12/28(Mon) 23:05:12|NO.29588

計算は確かにやってくれると思いますが、やってもらうためには指示を出さないといかんわけで…
指示を出す人が、作業の内容を理解してなかったら、あんまりうまくいかん気は します。

ken さんが数学に関してどの程度の知識をお持ちなのかはわかりませんが、
f さんが挙げているものは 三角関数 さえ知ってれば理解できるはずのものです。
ググったらそこいら辺の勉強もできるようなサイトは見つかるんじゃないかなと思いますよ。



GENKI

リンク

2009/12/29(Tue) 02:37:20|NO.29589

> >どうしてもウィンドウに表示したときの座標の数値がほしい場合は
> 座標の数値もほしいです。

「任意の3D座標点が表示されているウィンドウ座標(2D)を取得したい」と言うことですね。
fさんの回答No.29579で算出できるのだろうと思いますが、どうやら今のkenさんには理解は無理のようですね。
内容は高校数学程度のものですが、難しい人には難しいですよね。

しかしそんな人にもHSPは親切です。
こんな3D→2D(スクリーン)変換命令が用意されています。
HGIMG3: hgcnvaxis
Easy3D: E3DGetScreenPos2
d3module: d3getpos


> プラネタリウムの場合も3Dモデルを使っているのでしょうか?

星の座標を1個1個管理しているのかもしれませんね。
最近のプラネタリウムソフトは見たことが無いのでなんとも言えません。
もし、HSPで天体観賞用のソフトを作るなら3Dモデル作ったほうが簡単だと思います。


> PI = 3.141592 (円周率)

3.2から?M_PIが出来たようです。

> ググったらそこいら辺の勉強もできるようなサイトは見つかるんじゃないかなと思いますよ。

こういうとき教科書ってすごく役に立ちます。



ken

リンク

2009/12/29(Tue) 19:26:39|NO.29599

みなさんありがとうございます。

地球儀の中心から見た図というのは撤回します。外から見た図でいいです。

少し違うのですが最終的にはここ↓に描かれているような地球儀の全部または一部の図を描いて
任意の地点を地球儀上にプロットしたいのです。(経緯線だけ描いて地図は描きません)
http://gpscycling.net/fland/map/pj/07_ortho.gif

この図は日本の上空から見た図ですが任意の地点から見た図を描きたいのです。(正射図法というらしい)

NO.29579の方法ではXYZの原点はどこにとるのですか?


HGIMG3: hgcnvaxis Easy3D: E3DGetScreenPos2 d3module: d3getpos
それぞれNO.29579の計算をやってくれそうな気がしますがX=経度、Y=緯度で良いと思いますが
Zはなんですか?

できれば次のサンプルスクリプトを挙げてもらえませんか?

5ドットが1度として、画面中央が東経0度、北緯0度のとき東経30度、北緯40度の地点と東経30度、北緯0度
地点を結ぶ線



GENKI

リンク

2009/12/29(Tue) 20:46:01|NO.29600

数学では空間上のある位置を表すには、色んな座標系を用いることがあります。直交座標系や極座標などなど。
表現は様々ですが、空間内に存在する同じ点をあらわしているだけなので、これらは相互に変換できます。
いろんな座標系についてはググれば図付きで解説しているページがすぐに見つかります。
地球儀のような座標の表示方法は、「球座標系」と言うようです。

一方、数学やゲーム、DirectXでは普通、直交座標系で問題を扱います。
NO.29579の数式も直交座標系です。
地球儀上の任意の場所を示す場合も、位置も緯度や軽度を指定されたら、いったん直交座標系に換算し処理されます。

HSPも例外ではありません。
HGIMG3、Easy3D、d3moduleが使用している座標系は直交座標系です。
したがって、パラメータの(X,Y,Z)は直交座標系のX,Y,Zを指します。
球座標系→直交座標系の換算式はググればすぐに出てきます。



> できれば次のサンプルスクリプトを挙げてもらえませんか?

「5ドットが1度として」という前提がすでに問題があることはさておき。
現状ではサンプルを提示しても正しく理解することは大変困難でしょう。結果的に目的達成まで遠回りすることになります。
先ずはプログラムを考える前に、メタセコイアなどのツールで3Dグラフィックに慣れ親しんで、3Dの感覚になれたり、基本的な知識を身につけたほうがいいと思います。
いくつかモデルを作っているうちに基本的な知識が付いていくと思います。もちろん用語などを調べる努力も必要ですが。

メタセコイア:
http://www.metaseq.net/
フリーで使用できる3Dモデル作成ソフト。


> この図は日本の上空から見た図ですが任意の地点から見た図を描きたいのです。(正射図法というらしい)

この手の絵が描きたいのであれば、前にも説明したとおり、メタセコイアでモデルを作ってHGIMG3かEasy3Dで表示するだけです。数学わからなくても表示だけなら簡単です。
視点(カメラ位置)も注視点(カメラが見つめる先)もパース(遠近感)も自由に設定できます。
画面上の座標もNO.29589で説明した命令で取得できます。

なお、「正射図法」云々は、これは多分テクスチャのことと思われます。



ken

リンク

2009/12/29(Tue) 22:24:12|NO.29601

GENKIさん

3Dが何たるかを知らない初心者に丁寧に解説下さいましてありがとうございます。

メタセコイアと3D関係のプラグイン勉強してみます。

とりあえず方向性は見えてきました、皆さんありがとうございました。
また分からないことがありましたら質問させて頂ます。



ONION software Copyright 1997-2023(c) All rights reserved.