トップページ > 過去ログ > 記事閲覧
ビュー行列とスケールについて
名前:purple 日時: 2012/12/18 07:10

はじめして、MATRIX寄りの質問になりますが例えば モデル(A)がモデルBの方向を向く事は比較的簡単に出来るのですが MV1SetScaleで指定したスケールが反映されず行き詰ってしまいした。 予想ではLookAtで作成したビューMATRIXにモデルのサイズを CreateScalingMatrixなどで作りMMultで 掛け合わせると反映されるものと思っていましたが駄目でした そこで何か良い方法はないかと思い質問してみました 簡易的なサンプルです #include "dxlib.h" int WINAPI WinMain (HINSTANCE, HINSTANCE, LPTSTR, int) { ChangeWindowMode(TRUE ); if (DxLib_Init()<0) return -1; SetDrawScreen(DX_SCREEN_BACK); int ModelA=MV1LoadModel( "DxChara.x" ); MV1SetPosition(ModelA,VGet(0.0f,-1000.0f,1500.0f)); MV1SetScale( ModelA, VGet(3.5f,3.5f,3.5f) ) ; int ModelB=MV1LoadModel( "DxChara.x" ); MV1SetPosition(ModelB,VGet(800.0f,-1000.0f,1500.0f)); MV1SetScale( ModelB, VGet(3.5f,3.5f,3.5f) ) ; while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) { ClearDrawScreen() ; MATRIX hMATRIX; VECTOR vec_from=MV1GetPosition(ModelA);//ビューの位置 VECTOR vec_lookat=MV1GetPosition(ModelB);//ビューの注視点 VECTOR vec_up=VGet(0, 1, 0);// ビューの上方向 CreateLookAtMatrixRH(&hMATRIX,&vec_from, &vec_lookat, &vec_up);//ビュー行列の作成 hMATRIX=MInverse(hMATRIX) ; MV1SetMatrix( ModelA,hMATRIX) ; MV1DrawModel(ModelA); MV1DrawModel(ModelB); ScreenFlip() ; } DxLib_End(); return 0; }

Page: 1 |

Re: ビュー行列とスケールについて ( No.1 )
名前:みょも 日時:2012/12/18 08:22

>hMATRIX=MInverse(hMATRIX) ; の直後に CreateScalingMatrix(&sMATRIX, 1.5f, 1.5f, 1.5f); hMATRIX = MMult(hMATRIX, sMATRIX); もしくは sMATRIX = MGetScale(VGet(1.5f, 1.5f, 1.5f)); hMATRIX = MMult(hMATRIX, sMATRIX); といったコードを追加したらスケールも適用されましたが、 これに適切なスケール値を与えても駄目でしょうか?
Re: ビュー行列とスケールについて ( No.2 )
名前:purple(解決) 日時:2012/12/18 08:24

試してみた所、見事にスケールが反映しました! みょもさん、回答ありがとうございましたm(__)m

Page: 1 |