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); }