DirectXでカメラで写す被写体の位置は変えずにカメラ位置を動かすには
どのような方法があるのでしょうか?
環境はVisual C++ 2008 Express Edition
OSはwindows XPです。
DirectXでカメラ視点を動かすには??
Re:DirectXでカメラ視点を動かすには??
D3DXMatrixIdentity(&view, &D3DXVECTOR3( 10.0f, 5.0f, 10.0f ), // カメラの位置 &D3DXVECTOR3( 0.0f, 0.0f, 0.0f ), // カメラの向き &D3DXVECTOR3( 0.0f, 0.0f, 1.0f ) ); // カメラの傾きカメラの位置のD3DXVECTOR3( 10.0f, 5.0f, 10.0f )の値をいじる。
Re:DirectXでカメラ視点を動かすには??
質問の意図が2種類に見えるのですが……。
カメラの位置を動かしたい場合は D3DXMatrixLookAtLH関数か D3DXMatrixLookAtRH関数で
ビュー行列を生成、IDirect3DDevice9のメンバ SetTransformの D3DTS_VIEWでセットします。
スクリーン座標系的に見ているオブジェクトの位置を変えたくない場合は
この D3DXMatrixLookAt?H関数の第3引数に常にオブジェクトの位置を指定すれば
どの位置にカメラがあってもカメラはオブジェクトの方向を向きます。
カメラの位置を動かしたい場合は D3DXMatrixLookAtLH関数か D3DXMatrixLookAtRH関数で
ビュー行列を生成、IDirect3DDevice9のメンバ SetTransformの D3DTS_VIEWでセットします。
スクリーン座標系的に見ているオブジェクトの位置を変えたくない場合は
この D3DXMatrixLookAt?H関数の第3引数に常にオブジェクトの位置を指定すれば
どの位置にカメラがあってもカメラはオブジェクトの方向を向きます。
Re:DirectXでカメラ視点を動かすには??
Justyさんのおっしゃるとおりの質問です。
被写体からの一定距離でカメラ視点を回転させるプログラムに取り組んでいます。
今のソースの状態は下のとおりです。
ソースコード
D3DXVECTOR3 viewvecE(0.0f, 1.0f, -5.0f), viewvecL(0.0f, 2.0f, 4.0f);
D3DXVECTOR4 viewvec;
D3DXVec3Transform( &viewvec, &viewvecE, &matWorld2 );
D3DXVECTOR3 vEyePt( mypos.x + viewvec.x,
mypos.y + viewvec.y,
mypos.z + viewvec.z );
D3DXVec3Transform( &viewvec, &viewvecL, &matWorld2 );
D3DXVECTOR3 vLookatPt( mypos.x + viewvec.x,
mypos.y + viewvec.y,
mypos.z + viewvec.z );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView,&cameraangle.x, &cameraangle.y, &cameraangle.z );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
被写体からの一定距離でカメラ視点を回転させるプログラムに取り組んでいます。
今のソースの状態は下のとおりです。
ソースコード
D3DXVECTOR3 viewvecE(0.0f, 1.0f, -5.0f), viewvecL(0.0f, 2.0f, 4.0f);
D3DXVECTOR4 viewvec;
D3DXVec3Transform( &viewvec, &viewvecE, &matWorld2 );
D3DXVECTOR3 vEyePt( mypos.x + viewvec.x,
mypos.y + viewvec.y,
mypos.z + viewvec.z );
D3DXVec3Transform( &viewvec, &viewvecL, &matWorld2 );
D3DXVECTOR3 vLookatPt( mypos.x + viewvec.x,
mypos.y + viewvec.y,
mypos.z + viewvec.z );
D3DXVECTOR3 vUpVec( 0.0f, 1.0f, 0.0f );
D3DXMATRIXA16 matView;
D3DXMatrixLookAtLH( &matView,&cameraangle.x, &cameraangle.y, &cameraangle.z );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );