DirectXプログラミング講座 〜Vol8. Xファイルの表示〜

前回の3Dポリゴンの表示では、四角形オブジェクトの表示を行いましたが、自ら頂点座標を設定してすべてのポリゴンを作り出そうとすると、かなりの労力が必要な上に、複雑な形状のものはお手上げ状態になってしまいます。そこで登場するのがXファイル。Xファイルを使えば、3Dモデリングソフトを使って作られた物体をDirectX上で扱うことができるようになります。扱い方もとっても簡単なので、すぐに挑戦してみましょう。


CMeshModelクラス

CMeshModelは物体のメッシュ構造を管理するためのクラスであり、Xファイルの読み込み及び表示が簡単に行えます。


'コンストラクタ(オブジェクト生成と同時にXファイルを読み込みこむ)
CMeshModel::CMeshModel(
    pszFileName_xfile As BytePtr   'Xファイルのファイルパス
)

'オブジェクトを3D空間に描画します(RenderProc関数の中から呼び出す必要があります)
CMeshModel::Draw(
    VectorPosition As *D3DVECTOR,   '位置
    VectorDirection As *D3DVECTOR   '方向
)

サンプルプログラムの作成方法


↑実行イメージ

サンプルプロジェクトをダウンロード

プロジェクト名を "testxfile" にセットして、DirectXアプリケーションのプロジェクトを新たに作成します。ここから、testxfile.abpに対してコーディングをしていきます。

●testxfile.abpの先頭部分のコーディング

CMeshModelオブジェクトポインタの定義を行います。

#include "testxfile.idx"


Dim ScreenX=640 As Long    'ディスプレイの幅  (ピクセル単位)
Dim ScreenY=480 As Long    'ディスプレイの高さ(ピクセル単位)

' TODO: この位置にグローバル変数を定義してください。
Dim pModel As *CMeshModel

●InitProc関数のコーディング

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

●QuitProc関数のコーディング

pModelオブジェクトを解放します。

Sub QuitProc()
    ' TODO: この位置にアプリケーションの終了処理を記述してください。

    Delete pModel

    'DirectXの終了処理
    dx_Quit()
End Sub

●RenderProc関数のコーディング

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

たったこれだけのコーディングで、家庭用ゲーム機で見たような画面が表示できたりします(^^;;;。次のステップではキーボード入力を受け付けて対象物を動かしてみましょう。

Xファイルを作るには?

市販の3Dモデリングソフトは高機能ですが、高価でもあります。本格的に3Dアプリ開発を行いたいと思った方は購入を考えてもいいかもしれませんが、まずはDOGA-L1などのお手軽フリーソフトを活用しましょう。DOGA-L1は部品同士を組み合わせることで物体をデザインしていくことができます。

ダウンロードはこのサイトから→ http://www.doga.co.jp/ptdoga/


講座インデックスへ戻る ©2005 Discoversoft