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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0220
チャーくんHGIMG4でオブジェクトの回転中心を指定したい2解決


チャーくん

リンク

2018/2/20(Tue) 23:01:49|NO.82522

3Dモデルデータを回転させようとしたのですが、setangを使うと原点の軸を中心にして回転
してしまいます。

3Dモデルを編集して原点に持ってくるのも悪くはないのですが…できれば回転の中心を動的に
変える方法はありませんか?



この記事に返信する


暇人

リンク

2018/2/21(Wed) 23:55:11|NO.82525

HGIMG4 二つのモデルの疑似親子
http://hsp.tv/play/pforum.php?mode=pastwch&num=74397

↑を応用すると出来る


#include "hgimg4.as" #module #undef fvdir #deffunc fvdir array fv,double _vx,double _vy,double _vz dup ay,fv(1) //実数の配列を3回以上参照するよりdupで変数にした方がちょっとだけ軽い dup az,fv(2) vx=_vx*cos(az)-_vy*sin(az) vy=_vx*sin(az)+_vy*cos(az) vx1=vx*cos(ay)+_vz*sin(ay) vz1=-vx*sin(ay)+_vz*cos(ay) fv(1)=vy*cos(fv)-vz1*sin(fv) fv(2)=vy*sin(fv)+vz1*cos(fv) fv=vx1 return #global gpreset setcls CLSMODE_SOLID, $4040 setcolor GPOBJ_LIGHT, 1,1,1 ; ライトカラーを設定 setdir GPOBJ_LIGHT, 0.5,0.5,0.5 ; アンビエントカラーを設定 chdir dir_exe+"\\sample\\\hgimg4" gpload id_model,"res/duck" ; モデル読み込み gpclone id_model2, id_model //回転座標用モデル xx=0.0 yy=0.0 zz=0.0 setpos id_model,3.0,2.0,0 getpos id_model,x,y,z gpbox id_box, 0.1 ; 右上のアヒルに回転座標の中心表示用 gpbox id_boxx, 2.0,$0000ff ; 中央のアヒルのX軸表示用 setscale id_boxx,1.0,0.05,0.05 gpbox id_boxy, 2.0,$00ff00 ; 中央のアヒルのY軸表示用 setscale id_boxy,0.05,1.0,0.05 gpbox id_boxz, 2.0,$ff0000 ; 中央のアヒルのZ軸表示用 setscale id_boxz,0.05,0.05,1.0 setpos GPOBJ_CAMERA,0.0,00.0,10.0 gplookat GPOBJ_CAMERA, 0.0,0.0,0.0 ; カメラから指定した座標を見る addx=0.0 addy=0.0 addz=0.0 font "MS ゴシック",32 repeat stick key,$ff if key&128 : end redraw 0 ; 描画開始 ; カーソルキーで回転座標を移動 if key&1 : addx-0.1 //ソルキー(←→)でX軸移動 if key&4 : addx+0.1 if key&64 {//Ctrl+カーソルキー(↑↓)でZ軸移動 if key&2 : addz-0.1 if key&8 : addz+0.1 }else{//ソルキー(↑↓)でY軸移動 if key&2 : addy+0.1 if key&8 : addy-0.1 } //モデル回転 yy+0.04 xx+0.03 zz+0.01 setang id_model,xx,yy,zz //回転座標をベクトルとして回転 fvset fv,xx,yy,zz fvdir fv,addx, addy, addz setpos id_model,x+addx,y+addy,z+addz //モデルの基点に回転座標を加算 addpos id_model,-fv,-fv(1),-fv(2) //回転したベクトルを減算 //可視用 setpos id_boxx,addx,addy,addz setpos id_boxy,addx,addy,addz setpos id_boxz,addx,addy,addz setpos id_box,x+addx,y+addy,z+addz color 255,255,255 pos 0,0 mes "addx="+addx mes "addy="+addy mes "addz="+addz gpdraw ; シーンの描画 redraw 1 ; 描画終了 await 1000/60 ; 待ち時間 loop
中央のアヒルはどの場所が回転座標になってるか視覚的に分かるようにしてる
実際に回転するのは右上にいるアヒル



チャーくん

リンク

2018/2/22(Thu) 00:35:25|NO.82526

やったー!ありがとうございます!
これでタイヤが宙を舞わなくて済みます!



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