メッシュモデルが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命令の組み合わせで比較的簡単に出来る
(速度と精度がトレードオフになるが・・・)