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


HSPTV!掲示板


未解決 解決 停止 削除要請

2013
0320
オブジェクトの角度変更について7解決


リンク

2013/3/20(Wed) 11:16:14|NO.53093

バージョンは3.32で、hgimg3を使用しています。

mychrは、全て1つの立方体xモデルから作り出したオブジェクトです。
DOTS個のオブジェクト原点を中心とした球状に配置されている状態です。
全てのオブジェクトが原点を向くように角度を設定したいです。
以下のようなルーチンを組んでみましたが、軸によっては
違うポイントを指しているような妙な実行結果となります。
誤っている点をご指摘願えますでしょうか。

repeat DOTS
getpos mychr(cnt),xx,yy,zz
fvset vv,xx,yy,zz
fvface vv,0.0,0.0,0.0
selang mychr(cnt)
objsetfv vv
loop



この記事に返信する


リンク

2013/3/20(Wed) 14:17:17|NO.53094

ああ、多分これクオータニオンとかそういう方面が必要みたいですね。
解決はしていませんが、とりあえずこれでは駄目だというのは判りました。



暇人

リンク

2013/3/20(Wed) 18:08:23|NO.53096

objrotfv.hspは↓から
第三章 回転と座標変換
http://www.geocities.jp/inaeggmon/hgimg3/03-03.html



#include "hgimg3.as" #include "objrotfv.hsp" screen 0,640,480,0 cls 4 hgini setcolor 255 addbox mdid,5,5 ; BOXモデルを作成 regobj Center_objid,mdid ; BOXモデルをオブジェクトとして登録 addline m_line,,$00ffff ; 線分モデルの登録 addxfile xmdid,dir_exe+"\\sample\\hgimg3\\font_a.x" ; モデルを読み込む modelorder xmdid,HGMODEL_ROTORDER_ZYX //通常モデルと同じ回転順序にする DOTS=30 repeat DOTS regobj mychr(cnt),xmdid setpos mychr(cnt),25.0-0.1*rnd(500),25.0-0.1*rnd(500),25.0-0.1*rnd(500) getpos mychr(cnt),xx,yy,zz fvset vv,xx,-yy,zz //y軸反転してセット fvface vv,0.0,0.0,0.0 selang mychr(cnt) //任意軸の回転させたいオブジェクト選択(objrotfvを使う準備) fvset axis,0.0,0.0,0.0 //回転前の角度(obj初期値は全て0なので0設定) fvdir axis,1.0 ,0.0 ,0.0 //x軸(euler2matrixの代わり) objrotfv axis,vv //axis軸をvv分回転 fvset axis,0.0,0.0,0.0 fvdir axis,0.0 ,1.0 ,0.0 //y軸 objrotfv axis,vv(1) fvset axis,0.0,0.0,0.0 fvdir axis,0 ,0 ,1 //z軸 objrotfv axis,vv(2) //ラインオブジェクト設置 fvdir vv,0,0,-(sqrt(xx*xx+yy*yy+zz*zz)-5) regobj lobj,m_line ; オブジェクト登録 setpos lobj, xx,yy,zz ; 座標の指定 setwork lobj, vv,vv(1),vv(2) ; 線分のオフセット loop *main hgdraw ; 描画処理 hgsync 16 ; 時間待ち stick k,127 if k&128 : goto *owari ; [ESC]で終了 fvset cfv,0.0, 0.0, 0.0 if k&2 : cfv+0.05 if k&8 : cfv-0.05 if k&1 : cfv(1)-0.05 if k&4 : cfv(1)+0.05 if k&16 : cfv(2)+0.05 if k&64 : cfv(2)-0.05 getang HGOJB_CAMERA,crx,cry,crz //現在のカメラ角度(これにcfvを各軸に加算) selcang //カメラ選択(objrotfvを使う準備) fvset axis,crx,-cry,crz //回転前の角度 fvdir axis,1.0 ,0.0 ,0.0 //x軸 objrotfv axis,cfv //axis軸をcfv分回転 fvset axis,crx,-cry,crz fvdir axis,0.0 ,1.0 ,0.0 //y軸 objrotfv axis,cfv(1) fvset axis,crx,-cry,crz fvdir axis,0 ,0 ,1 //z軸 objrotfv axis,cfv(2) getang HGOJB_CAMERA,crx,cry,crz fvset vv,crx,-cry,crz fvdir vv,0.0,0.0,100.0 selcpos objsetfv vv goto *main *owari end
fvfaceはz軸を回転させないので
目的の方向に向かせてz軸も回転させるには
> objrotfv axis,vv(2)
のvv(2)に角度を入れる



リンク

2013/3/20(Wed) 19:46:22|NO.53100

サンプル付きでご指導ありがとうございます。
試してみたところまさにこれです。

早速取り入れようと思ったのですが現在、hgimg3と他のプラグインを
併用する為に#regcmd 19に書き換えておりまして、その状態ですと
残念ながら実行エラーが出てしまいます。
ですので今回は自分で作った、誤差ありまくりの回転で行こうと思います。



暇人

リンク

2013/3/20(Wed) 20:54:52|NO.53106

あれ?
objrotfv.hspは標準命令とhgimg3の命令しか使ってないよ?
hgimg3の命令使ってるから必ず↓のように

#include "hgimg3.as" #include "objrotfv.hsp"
hgimg3の後にincludeする必要がある



リンク

2013/3/20(Wed) 21:20:36|NO.53108

はい、ご提示いただいたソースの単体での動作は確認できました。

ですが現在作っているソフトではaviplay.dllを利用しております。
hgimg3とこれを併用するために、私には理由は判らないのですが
前述したhgimg3.as内の#regcmdを19に書き換える必要がありまして(標準の18では動作しない)
書き換えると今度はobjrotfv.hspが「代入できない変数名を使用〜」のエラーを
吐いてしまうというわけなのです。



暇人

リンク

2013/3/20(Wed) 22:18:46|NO.53109

hgimg3.as内の#regcmdを19にして
aviplay_080608\sample.hspを

#include "aviplay.as" #include "winmm.as" //timeGetTimeを使う為 #include "hgimg3.as" #include "objrotfv.hsp"
みたいにして
hginiして適当にobjrotfvの命令使ったけどエラーは出なかった



リンク

2013/3/20(Wed) 23:22:53|NO.53114

失礼致しました、通りました。
includeする順番だけの問題だったのだろうか?



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