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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0509
南無三[急募!]hgimg3での2D座標変換について3解決


南無三

リンク

2018/5/9(Wed) 18:58:14|NO.84301

hgcnvaxisではカメラ視点の背後の3D座標を変換した際、カメラを挟んで反対側の画面内の2D座標を
算出してしまうようです。見えている3D座標についてのみ計算する方法をお願いします。
明日までに完成させないといけない作品があります、可能であればサンプルコードなどで詳細に教え
ていただけると助かります。よろしくおねがいします。



この記事に返信する


あらや

リンク

2018/5/9(Wed) 20:21:18|NO.84302

急ぎということなので簡単な方法で
fvset と fvinner を使うだけの方法があります。

fvset vec, 2Dに変換したい点の座標-カメラの位置座標xyz
fvinner vec, カメラの向きベクトルxyz
こうするとvec.0の正負で前後を判別可能

たしかこんな感じです。
ただこの方法はカメラの前か後ろかを判別できるだけで、
画面内に入るかどうかではありません。

画面内かどうかを正確に判別する場合は
視錘台の内外を判定する方法として面倒な行列の計算が必要になります。
そっちは少々時間がかかりそうなので、
どなたか3Dの計算に詳しい親切な方にお任せします。



暇人

リンク

2018/5/9(Wed) 20:48:47|NO.84303

先に見えてる物を選別せずにhgcnvaxisで選別すれば良い

>hgcnvaxis var_x,var_y,var_z,x,y,z,mode
のmodeを0で取得した場合var_zにZバッファ値が返るので利用する
負値又は1.0以上がカメラ外になる
負値はカメラ座標からNearZまでの間が指定された場合

#include "hgimg3.as" hgini chdir dir_exe+"\\sample\\hgimg3\\" setfont 16,16,12,1 ; font Tex select(cx,cy,px,mode) texload "fontchr.bmp" ; フォントテクスチャの登録 addbox m_model,10,10 repeat 500 regobj obj, m_model setpos obj,1000-rnd(2000),500-rnd(1000),1000-rnd(2000) setcoli obj,1 loop clscolor $6060 cax=0.0 cay=0.0 *main stick key,$3ff if key&128 : goto *owari mx=mousex my=mousey if key&512 {//マウス右ドラックでカメラ回転 mx_dif=mx-mx_bak my_dif=my-my_bak cax-=0.005*my_dif cay-=0.005*mx_dif } mx_bak=mx my_bak=my setang HGOBJ_CAMERA,cax,cay, 0.0 hgdraw findobj 0,1 repeat nextobj id if id<0{break} getpos id,x,y,z hgcnvaxis xx,yy,zz,x,y,z if zz < 1.0 { if zz > 0.0 {//カメラ範囲内 fprt ""+id,xx,yy } } loop hgsync 16 ; 時間待ち goto *main *owari end



南無三

リンク

2018/5/9(Wed) 22:51:33|NO.84306

2人ともありがたいです、zバッファの意味がやっと分かった感じで…
fv系列に関しても理解が深まりました。
今回成功すれば部費も出て良い設備が整うやもしれません。本当にありがとうございます。



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