DirectX9とりあえず描画

ハードディスクを500GX2台の1テラにしてみました。
そろそろ、プログラムの続きを始めようかと・・・・・

DirectX9ので、描画メモを残します
■G9lib.h

#pragma once
#include	"windows.h"
#include	<d3d9.h>
#include	<d3dx9.h>

class G9lib
{
public:
	G9lib(void);
public:
	~G9lib(void);
private:
	LPDIRECT3D9 pD3D;
	LPDIRECT3DDEVICE9 pD3DDevice;
	D3DPRESENT_PARAMETERS d3dppApp;
public:
	bool	Init( HWND hwnd );
	void	Exit( void );
	void	TestDraw();
};

//頂点フォーマット
struct D3DVERTEXCOR {
	float   x,y,z;
	DWORD   color;

	enum { FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE } ;
};

■G9lib.cpp

#include	"G9lib.h"
//ライブラリ登録
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

G9lib::G9lib(void)
{
	pD3D	= NULL;
	pD3DDevice	= NULL;
}

G9lib::~G9lib(void)
{
	this->Exit();
}

//------------------------------------------------------------------------------
//■ライブラリ初期化
//------------------------------------------------------------------------------
bool	G9lib::Init( HWND hwnd )
{
	// Direct3Dオブジェクトの取得
	pD3D = Direct3DCreate9(D3D_SDK_VERSION);
	if (pD3D == NULL) {
		MessageBox( hwnd, L"Direct3Dの初期化に失敗しました、DirectX 9.0がインストールされているか確認してください。",L"Base",MB_OK | MB_ICONSTOP);
		return FALSE;
	}

	// 現在のディスプレイモードを得る
	D3DDISPLAYMODE dmode;
	if (FAILED(pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &dmode))) {
		MessageBox( hwnd, L"ディスプレイモードの取得に失敗しました。",L"Base",MB_OK | MB_ICONSTOP);
		return FALSE;
	}
	// バックサーフェースのフォーマットをコピーして使用する
	ZeroMemory(&d3dppApp, sizeof(d3dppApp));
	d3dppApp.Windowed	= TRUE;							// ウィンドウモード
	d3dppApp.SwapEffect = D3DSWAPEFFECT_DISCARD;		// 垂直同期でフリップ
	d3dppApp.BackBufferCount = 1;
	d3dppApp.BackBufferFormat = dmode.Format;
	d3dppApp.EnableAutoDepthStencil = TRUE;
	d3dppApp.AutoDepthStencilFormat= D3DFMT_D16;

	// デバイスの作成
	if (FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dppApp, &pD3DDevice))) {
		if (FAILED(pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dppApp, &pD3DDevice))) {
			MessageBox( hwnd, L"デバイスの作成に失敗しました、画面モードが16ビットあるいは32ビットになっていることを確認してください。",L"Base",MB_OK | MB_ICONSTOP);
			return FALSE;
		}
	}
	return TRUE;
}

//------------------------------------------------------------------------------
//■ライブラリ開放
//------------------------------------------------------------------------------
void	G9lib::Exit( void )
{
	if (pD3D) {
		pD3D->Release();
		pD3D = NULL;
	}
	if (pD3DDevice) {
		pD3DDevice->Release();
		pD3DDevice = NULL;
	}
}

//------------------------------------------------------------------------------
//■テスト描画
//------------------------------------------------------------------------------
void	G9lib::TestDraw()
{
	D3DXMATRIX      matView;
	D3DXMATRIX      matProj;
	D3DXMATRIX      matWorld;

	pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0, 0);

//	pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );	//両面
	pD3DDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_CCW );	//片面
	pD3DDevice->SetRenderState( D3DRS_LIGHTING,FALSE);		//光源無効

	pD3DDevice->BeginScene();
	//-----------------------------------------
	//ワールド座標の回転
	D3DXMatrixRotationY( &matWorld,timeGetTime()/5000.0f );
	pD3DDevice->SetTransform( D3DTS_WORLD, &matWorld );

	//-----------------------------------------
	//View 座標の設定
	D3DXMatrixLookAtLH(&matView,&D3DXVECTOR3(0.0f, -5.0f, 30.0f),	//	カメラの位置を表す3次元ベクトル
                                &D3DXVECTOR3(0.0f, 0.0f, 0.0f),		//	カメラの注視点を表す3次元ベクトル
                                &D3DXVECTOR3(0.0f, 1.0f, 0.0f));	//	上方向を表す3次元ベクトル
	pD3DDevice->SetTransform( D3DTS_VIEW, &matView );
	//-----------------------------------------
	//透視変換の設定
	D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.0f, 10.0f, 2000.0f );
	pD3DDevice->SetTransform( D3DTS_PROJECTION,&matProj );

	//-----------------------------------------
	//	Z値に関して
	pD3DDevice->SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);
	pD3DDevice->SetRenderState(D3DRS_ZWRITEENABLE, TRUE);

	//-----------------------------------------
	//	モデル登録
	D3DVERTEXCOR vtx[6]={
		{ -5.0f, 0.0f,  5.0f, 0xff0000ff  },   //青の頂点
		{  5.0f, 0.0f,  5.0f, 0xffff0000  },   //赤の頂点
		{  0.0f, 8.0f,  2.0f, 0xffffffff  },   //白の頂点
		{  0.0f, 0.0f, -3.0f, 0xff00ff00  },   //緑の頂点
		{ -5.0f, 0.0f,  5.0f, 0xff0000ff  },   //青の頂点
		{  5.0f, 0.0f,  5.0f, 0xffff0000  }    //赤の頂点
	};
	pD3DDevice->SetFVF(D3DVERTEXCOR::FVF);
	pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLESTRIP,4,vtx,sizeof(D3DVERTEXCOR));

	//-----------------------------------------
	//	描画
	pD3DDevice->EndScene();
	pD3DDevice->Present(NULL, NULL, NULL, NULL);
}

このプログラムでこんな感じの画面になります。