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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0515
mesohgimg3で2未解決


meso

リンク

2014/5/15(Thu) 18:20:34|NO.62004

メッシュモデルをクリックした時にその地点のx,y,z値を取得する方法ってありますか?



この記事に返信する


暇人

リンク

2014/5/24(Sat) 06:37:56|NO.62152

メッシュモデルがaddmeshで作った地形モデルなのか
Xファイルから作ったモデルの事なのか分からない
どちらにしろ一発で座標取得出来るようなのはhgimg3の命令としては存在しない

制限は有るがXファイルから作ったモデルの当たり判定をしてくれる
HGHITってモジュールがコンテストに出てた
vectorのがファイルは新しいけど更新されてるかは分からない
http://www.vector.co.jp/soft/winnt/prog/se483225.html
ただ判定するmeshhit命令にバグがあるので修正が必要

で、これだけだとマウス座標を3D座標には出来ないので
http://hsp.tv/play/pforum.php?mode=pastwch&num=58413#58425
ここに書かれてるモジュールを使うと良い


ファイルhghit.hspを開いてmeshhit命令内の修正(ファイル内一番下の新規命令)
>#deffunc meshhit array aa,var px,var py,var pz ,var vx,var vy,var vz,var flag
この下に

_px=px _py=py _pz=pz
これをコピペ

>PL=((aa(0,0,cn)-px)*nx)+((aa(0,1,cn)-py)*ny)+((aa(0,2,cn)-pz)*nz)//面と点Pとの距離
これを

PL=((aa(0,0,cn)-_px)*nx)+((aa(0,1,cn)-_py)*ny)+((aa(0,2,cn)-_pz)*nz)//面と点Pとの距離
に置換え

>px=(px+(vx*TT))
>py=(py+(vy*TT))
>pz=(pz+(vz*TT))
これを

px=(_px+(vx*TT)) py=(_py+(vy*TT)) pz=(_pz+(vz*TT))
に置換えして上書き保存

下のサンプルはHghitフォルダ内のファイルを使用するので
一度Hghitフォルダに保存してから実行してください

#include "hgimg3.as" #include "hghit.hsp" //ここに //http://hsp.tv/play/pforum.php?mode=pastwch&num=58413#58425 //のモジュール部分をコピペ screen 0,640,480,0 cls 4 hgini cnvsptowp_init //モジュール初期化 setfont 16,16,12,1 texload "fontchr.bmp" addxfile m_xmodel,"jiki.x" ; モデルを読み込む regobj obj, m_xmodel ; 自機オブジェクトの登録 clscolor $80 ; 背景色の設定 addxfile map,"map.x" //マップモデルを読み込む loadground "map.x",g1 //Xファイルをマップデータg1として読み込む regobj map,map setpos HGOBJ_CAMERA,0,-30,70 setang HGOBJ_CAMERA,-0.35,0,0 *main stick key,$3ff if key&128 : goto *owari hgdraw ; 描画 hgsync 15 ; 時間待ち getpos HGOBJ_CAMERA,px,py,pz //カーソルレイの基点としてカメラ座標を使うので取得 fvray rvec,mousex,mousey //マウスカーソルレイベクトル取得 fvmul rvec,200.0,200.0,200.0 //ベクトルを判定したい検索範囲まで伸ばす meshhit g1,px,py,pz ,rvec,rvec(1),rvec(2),flag //メッシュ判定 if flag=1 {//メッシュ判定で当たった時だけ座標設定 setpos obj,px,py,pz } title "X="+px+" Y="+py+" Z="+pz+" flag="+flag goto *main *owari end


addmeshの方の場合NO.58425のモジュールとhgimg3命令の組み合わせで比較的簡単に出来る
(速度と精度がトレードオフになるが・・・)



暇人

リンク

2014/5/28(Wed) 22:45:40|NO.62234

hghitはポリゴン数が増えると重くなるので、総当りしないようにして
更にd3dx9の命令使って、自分でもモジュール作ってみたら
数十倍は軽くなった(使用するポリゴン数で変わるが)

Hghitのmeshhit相当の処理で一番重い時の差は10倍ぐらい
(自分の環境だと1000枚程度なら最悪でも1ms以内に収まる)

groundhit相当の処理なら足元のポリゴン数枚判定するだけで良いので
使用してるポリゴン数が多いほど差が出る
groundhitで1000枚程度の処理をすると0.017〜3.0msと場所によって差が出る
それを分割処理して数枚だけ抜き出して判定するので0.015〜0.035ms程度になる

Hghitを改良されてる方がいて判定時に距離で振り分ける方法をやってたけど
自分のは読み込み時に自動で分割読み込みをやってるような感じ

hghitと同様の機能持たせるか分からないがスクリーン座標から地形の座標取得はできてるので
そのうち公開するかも・・・

ついでにレイとボックス、球、オブジェクト、addmeshで作った地形との判定も・・・



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