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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0104
HatterHGIMG3でオブジェクト取得4未解決


Hatter

リンク

2010/1/4(Mon) 14:21:52|NO.29742

クリックした所にあるオブジェクトのIDを取得したいのですけど、どうすればいいのでしょうか?

僕的に考えついたのは
1. X,Y座標からそのX,Y座標がさしている可能性のあるX,Y,Z座標の群(これらの群は直線状に並ぶはず...)を計算
2. 棒状のオブジェクトを1で計算した場所に設置
3. そのオブジェクトの衝突しているオブジェクトを判定。(getcoli)

2で生成するオブジェクトは無限の長さを持つことなってしまします。

もっと効率的なやり方とか取得するのに役立つ関数を教えてください。

pget的な命令があれば、オブジェクトの存在の有無を確認できるので2で生成するオブジェクトの長さを変えつつ見つかるまで2と3を繰り返せばいいともいます。
でも、処理が重くなるので無謀なことであるのには変わらないかもしれません。



この記事に返信する


足利超神

リンク

2010/1/5(Tue) 01:24:17|NO.29765

pgetで色判定しては?
DirectXも深度ピクセル?で同じようなことしてるらしいですし。
マウスで操作するのはあきらめて
別のインターフェイスを考えては?

それかカメラの距離、向き、視野、オブジェクトのスケール、位置、角度
などから計算するとか



Hatter

リンク

2010/1/5(Tue) 08:30:58|NO.29773

> pgetで色判定しては?
HGIMG3で初期化された画面にpgetをしても、初期化以前のデータしか取得、出来なかったんですけど...
それにそれだと同色のモデルが存在した時意味を成さないのでは....さらに深度の計算方法も不明だし
...
> マウスで操作するのはあきらめて
> 別のインターフェイスを考えては?
この方法(マウス)がダメならキー操作にするつもりですが、もうちょっとで可能そうなので、
しばらくこの方法について検討しようと思います。

> それかカメラの距離、向き、視野、オブジェクトのスケール、位置、角度
> などから計算するとか
クリックした位置の3D座標の可能性は無限に広がる(奥方向)ので無理では?
結局、僕に言った方法を衝突の部分を計算にしただけに過ぎないと思う.



M

リンク

2010/1/5(Tue) 20:53:38|NO.29788

hgcnvaxisを使ってみてる手はどうでしょうか。hgcnvaxisは、3D->2Dの変換になるので、考え方としては、「どのオブジェクトがマウスの座標に近いか」を探すことになります。

x軸とy軸がそれぞれ、横、縦方向を。z軸が奥行きをあらわしているとします。
1、クリック対象となる全てのオブジェクトの座標を、配列に記憶しておく
2、hgcnvaxis命令を使って、配列に記憶した座標を、2Dに変換する(カメラが移動するたびに、変換すること)
3、マウスをクリックしたときの座標を取得する
4、(2)で2Dに変換した座標の中から、マウスの座標に近いものを探す

大体、こんな感じで行けると思います。
ただ、これだと、Z軸上に重なっている物の判定がうまく出来ないので、(2)で変換する際にZ軸のみ3Dの情報を別個保管し、(4)で探す際にカメラのZ軸に近いものを選ぶようにすれば良いと思います。



Hatter

リンク

2010/1/5(Tue) 21:18:04|NO.29789

Mさん、参考にさせていただきます。

結局のところオブジェクトに総当り的な方法しかないのでしょうか?
もっと、効率的な方法ってありませんか?なにか素晴らしいアルゴリズムでも無いのでしょうか?



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