前回の3Dポリゴンの表示では、四角形オブジェクトの表示を行いましたが、自ら頂点座標を設定してすべてのポリゴンを作り出そうとすると、かなりの労力が必要な上に、複雑な形状のものはお手上げ状態になってしまいます。そこで登場するのがXファイル。Xファイルを使えば、3Dモデリングソフトを使って作られた物体をDirectX上で扱うことができるようになります。扱い方もとっても簡単なので、すぐに挑戦してみましょう。
CMeshModelは物体のメッシュ構造を管理するためのクラスであり、Xファイルの読み込み及び表示が簡単に行えます。
'コンストラクタ(オブジェクト生成と同時にXファイルを読み込みこむ) CMeshModel::CMeshModel( pszFileName_xfile As BytePtr 'Xファイルのファイルパス ) 'オブジェクトを3D空間に描画します(RenderProc関数の中から呼び出す必要があります) CMeshModel::Draw( VectorPosition As *D3DVECTOR, '位置 VectorDirection As *D3DVECTOR '方向 )
↑実行イメージ
プロジェクト名を "testxfile" にセットして、DirectXアプリケーションのプロジェクトを新たに作成します。ここから、testxfile.abpに対してコーディングをしていきます。
CMeshModelオブジェクトポインタの定義を行います。
#include "testxfile.idx"
Dim ScreenX=640 As Long 'ディスプレイの幅 (ピクセル単位)
Dim ScreenY=480 As Long 'ディスプレイの高さ(ピクセル単位)
' TODO: この位置にグローバル変数を定義してください。
Dim pModel As *CMeshModel
CMeshModelオブジェクトの生成を行います。コンストラクタにはXファイルのパスを引渡します。別途、適当なXファイルが必要になりますが、お持ちでない方はmodel.xをダウンロードし、出力されるEXEファイルと同じディレクトリに保存しておきましょう。
次に、ライトの設定を行いますが、今回はdx_SetDefaultLight関数が提供する標準的なライトを使用します。カメラ、視野情報の設定はステップ7のものと同じです。
Function InitProc()
'DirectXを初期化
If dx_Init(hMainWnd,ScreenX,ScreenY,FALSE)=0 Then
InitProc=0
Exit Function
End If
'マウスカーソルを非表示にする
ShowCursor(FALSE)
' TODO: この位置にアプリケーションの初期化コードを記述してください。
pModel=New CMeshModel("model.x")
'標準ライトをセット
dx_SetDefaultLight()
'カメラの位置及び方向をセット
Dim VectorEye=[0,2,-4] As D3DVECTOR
Dim VectorAt=[0,0,0] As D3DVECTOR
Dim VectorUp=[0,1,0] As D3DVECTOR
dx_SetCamera(VarPtr(VectorEye),VarPtr(VectorAt),VarPtr(VectorUp))
'視野情報をセット
dx_SetProjection(60*D3DX_PI/180,
1,
0.01,
100)
InitProc=1
End Function
pModelオブジェクトを解放します。
Sub QuitProc()
' TODO: この位置にアプリケーションの終了処理を記述してください。
Delete pModel
'DirectXの終了処理
dx_Quit()
End Sub
CMeshModel::Draw関数を使って物体の描画を行います。VectorDirectionに細工をしてY軸を中心に回転させてみましょう。
Sub RenderProc()
' TODO: この位置に描画に関するコードを記述してください。
Dim VectorPosition=[0,0,0] As D3DVECTOR
Dim VectorDirection As D3DVECTOR
VectorDirection.x=0
VectorDirection.y=GetTickCount()/1000
VectorDirection.z=0
pModel->Draw(VarPtr(VectorPosition),VarPtr(VectorDirection))
End Sub
たったこれだけのコーディングで、家庭用ゲーム機で見たような画面が表示できたりします(^^;;;。次のステップではキーボード入力を受け付けて対象物を動かしてみましょう。
市販の3Dモデリングソフトは高機能ですが、高価でもあります。本格的に3Dアプリ開発を行いたいと思った方は購入を考えてもいいかもしれませんが、まずはDOGA-L1などのお手軽フリーソフトを活用しましょう。DOGA-L1は部品同士を組み合わせることで物体をデザインしていくことができます。
ダウンロードはこのサイトから→ http://www.doga.co.jp/ptdoga/講座インデックスへ戻る | ©2005 Discoversoft |