Comments
Description
Transcript
2006_DX_3.
情報学演習ⅠA(Windows アプリケーションの開発) Windows アプリケーションの開発#3 【課題】 Xファイルの読み込み 1 サンプル・プログラムのダウンロード ① http://www.io.nara-su.ac.jp/~landy/Sample3.lzh をダウンロードする。 ② 解凍後、「Sample3.sln」をダブルクリックする。 ③ ソリューション・エクスプローラのソース・ファイル「Sample3.cpp」を開く。 2 プログラミング ① 3Dモデル: InitGeometry 関数 Xファイル「ball.x」から3Dモデルを読み込む。 if( FAILED(D3DXLoadMeshFromX( , D3DXMESH_SYSTEMMEM, g_pd3dDevice, NULL, &pMB, NULL, &g_NumMaterial, &g_pMesh )) ) return E_FAIL; ② 行列の設定: SetupMatrices 関数 World 行列を設定する(周期5秒で回転)。 D3DXMATRIXA16 matWorld; float sec = timeGetTime() / 1000.0f; float deg = ; D3DXMatrixRotationY( &matWorld, deg ); g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); ※ 変換行列 X軸回転: D3DXMatrixRotationX( &行列, 回転角[rad] ) Y軸回転: D3DXMatrixRotationY( &行列, 回転角[rad] ) Z軸回転: D3DXMatrixRotationZ( &行列, 回転角[rad] ) 平行移動: D3DXMatrixTranslation( &行列, X軸方向の移動量, Y軸方向の移動量, Z軸方向の移動量) 拡大縮小: D3DXMatrixScaling( &行列, X軸方向の倍率, Y軸方向の倍率, Z軸方向の倍率 ) 1 3 練習問題#1 ① Metasequoia で立方体の3Dモデルを作成し、Xファイルとして保存しなさい。 ② 保存したXファイルを表示するプログラムを作成しなさい。 4 練習問題#2 モデルの回転と移動 Y軸に平行な軸で自転しながら(周期 10 秒)、原点を中心にX軸上を幅3,周期 20 秒 で移動する。 D3DXMATRIXA16 matWorld, matA, matB; float sec = timeGetTime() / 1000.0f; float deg = 2.0f * D3DX_PI * sec / ; float x = 3.0f * sin( 2.0f * D3DX_PI * sec / ); D3DXMatrixRotationY( &matA, deg ); D3DXMatrixTranslation( &matB, x, 0, 0 ); D3DXMatrixMultiply( &matWorld, , ); g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); ※ 変換行列の掛け算 行列Aの変換を施したのちに行列Bの変換を施すような行列Cを作成する。 D3DXMatrixMultiply ( &行列C, &行列A, &行列B ) 例えば、Z軸方向に+1移動した(行列A)後に、30°X軸回転する(行列B)場合、 D3DXMATRIXA16 matA, matB, matC; D3DXMatrixTranslation( &matA, 1, 0, 0 ); D3DXMatrixRotationX( &matB, D3DX_PI / 6.0f ); D3DXMatrixMultiply( &matC, &matA, &matB ); g_pd3dDevice->SetTransform( D3DTS_WORLD, &matC ); 5 課題提出 配布された課題用紙に答えを記入し、提出しなさい。 2