コードはMV1GetMatrixで立方体の行列を取得し、それにMGetRotY()やMGetTranslate()で生成した回転行列、移動行列と
MMultで掛けあわせたものです。
コードは色々試して
・回転しない、移動しない
・回転する、移動しない
・回転しない、移動する
・回転する、移動する
の4通りにしました
で、例えば2番めのコードは、MV1GetMatrixで立方体の行列(拡大、回転、座標の要素)にMGetRotY()で取得した行列(回転)をMMult()で合成し、毎フレーム1度づつ回転するものです
しかし、結果として、月みたいな、一面をこっちに0,0,0に向けた状態を維持しながら回転する動きをします(衛星軌道?)
int Handle = MV1LoadModel("block.x");
int PlanetariumHandle = MV1LoadModel("planetarium/planetarium.mqo");
float i=PHI/180;
float t=5;
while(Loop()){
//予想:ちょっと偏った状態で止まっている
//結果:ちょっと偏った状態で止まっている 予想あたり
//MV1SetMatrix(Handle,MMult(MGetRotY(i),MGetTranslate(VGet(t,0,0))));
//予想:移動せずにその場で回転する
//結果:一点を中心にサテライト旋回 予想ハズレ
//MV1SetMatrix(Handle,MMult(MMult(MV1GetMatrix(Handle),MGetRotY(i)),MGetTranslate(VGet(t,0,0))));
//予想:回転せずに等速直線運動
//結果:一定の回転、一定の速度で移動する 予想ハズレ
//MV1SetMatrix(Handle,MMult(MGetRotY(i),MMult(MV1GetMatrix(Handle),MGetTranslate(VGet(t,0,0)))));
//予想:現在のHandleの行列と回転行列、現在のHandleの行列と移動行列が組み合わさり、それが現在のHandleにセットされ、一定の回転、一定の速度で移動する
//結果:最初ブルブルになってドカーンとどっかいく 予想ハズレ
//MV1SetMatrix(Handle,MMult(MMult(MV1GetMatrix(Handle),MGetRotY(i)),MMult(MV1GetMatrix(Handle),MGetTranslate(VGet(t,0,0)))));
MV1DrawModel(Handle);
MV1DrawModel(PlanetariumHandle);
SetCameraPositionAndTarget_UpVecY(VGet(5000,5000,5000),VTransform( VGet(0,0,0) , MV1GetMatrix( Handle ) ));
}
MV1GetMatrix(Handle)で取得した行列から拡大、回転、座標を取得する関数をまた個別に使用するのかと考えたのですが、
拡大と行列の関数はあるのですが回転がありません
>MGetScale 拡大行列を取得する
>MGetTranslate 平行移動行列を取得する
http://homepage2.nifty.com/natupaji/DxL ... nc_3d.html
みんなどのようしているのかというのと、
もし出来たら↑の間違ってるプログラムを、予想された正しいプログラムにしてもらえませんか?