- 1 名前:名前は開発中のものです。 [04/06/10 18:05 ID:VshiFFV8.net]
- ゲームに必要な要素を先生が出してくれます
その課題をクリアしていく講習会です
- 337 名前:名前は開発中のものです。 [04/07/15 20:55 ID:mfzLmHcI.net]
- #include <d3d9.h>
#include <dinput.h> LPDIRECT3D9 g_pD3D = NULL; LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; LPDIRECT3DVERTEXBUFFER9 g_pVB = NULL; LPDIRECTINPUT8 g_lpDI; LPDIRECTINPUTDEVICE8 g_lpDIDevice; HINSTANCE g_hinst; HWND g_hwndMain; struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color; }; CUSTOMVERTEX vertices[] = { { 0.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, }, // x, y, z, rhw, color { 320.0f, 0.0f, 0.5f, 1.0f, 0xffff0000, }, { 320.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, }, { 0.0f, 240.0f, 0.5f, 1.0f, 0xffff0000, }, }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE) int cx; int cy; void WINAPI ProcessKBInput() { #define KEYDOWN(name, key) (name[key] & 0x80) char buffer[256]; HRESULT hr; hr = g_lpDIDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer); if FAILED(hr) {
- 338 名前:名前は開発中のものです。 [04/07/15 20:55 ID:mfzLmHcI.net]
- exit(EXIT_FAILURE);
} cx=0; cy=0; if (KEYDOWN(buffer, DIK_RIGHT)) cx=1; else if(KEYDOWN(buffer, DIK_LEFT)) cx=-1; if (KEYDOWN(buffer, DIK_UP)) cy=-1; else if (KEYDOWN(buffer, DIK_DOWN)) cy=1; } void WINAPI DI_Term() { if (g_lpDI) { if (g_lpDIDevice) { g_lpDIDevice->Unacquire(); g_lpDIDevice->Release(); g_lpDIDevice = NULL; } g_lpDI->Release(); g_lpDI = NULL; } } HRESULT InitJoystick() { HRESULT hr;
- 339 名前:名前は開発中のものです。 [04/07/15 20:57 ID:mfzLmHcI.net]
- //オブジェクトの作成
hr = DirectInput8Create(g_hinst, DIRECTINPUT_VERSION, IID_IDirectInput8, (void**)&g_lpDI, NULL); if FAILED(hr) { exit(EXIT_FAILURE); } //キーボード デバイスの作成 hr = g_lpDI->CreateDevice(GUID_SysKeyboard, &g_lpDIDevice, NULL); if FAILED(hr) { DI_Term(); exit(EXIT_FAILURE); } //キーボードのデータ形式の設定 hr = g_lpDIDevice->SetDataFormat(&c_dfDIKeyboard); if FAILED(hr) { DI_Term(); exit(EXIT_FAILURE); } //キーボードの動作の設定 hr = g_lpDIDevice->SetCooperativeLevel(g_hwndMain, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); if FAILED(hr) { DI_Term(); exit(EXIT_FAILURE); } }
- 340 名前:名前は開発中のものです。 [04/07/15 20:58 ID:mfzLmHcI.net]
- HRESULT InitD3D( HWND hWnd )
{ if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) ) return E_FAIL; D3DPRESENT_PARAMETERS d3dpp; ZeroMemory( &d3dpp, sizeof(d3dpp) ); d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pd3dDevice ) ) ) { return E_FAIL; } return S_OK; } HRESULT InitVB() { if( FAILED( g_pd3dDevice->CreateVertexBuffer( 4*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) ) { return E_FAIL; } VOID* pVertices; if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) ) return E_FAIL; memcpy( pVertices, vertices, sizeof(vertices) );
- 341 名前:名前は開発中のものです。 [04/07/15 21:07 ID:mfzLmHcI.net]
- g_pVB->Unlock();
return S_OK; } VOID Cleanup() { if( g_pVB != NULL ) g_pVB->Release(); if( g_pd3dDevice != NULL ) g_pd3dDevice->Release(); if( g_pD3D != NULL ) g_pD3D->Release(); } VOID Render() { if (g_lpDIDevice) g_lpDIDevice->Acquire(); ProcessKBInput(); for (int i=0; i<4; i++) { vertices[i].x=vertices[i].x+cx; vertices[i].y=vertices[i].y+cy; } VOID* pVertices; if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) ) exit(EXIT_FAILURE); memcpy( pVertices, vertices, sizeof(vertices) ); g_pVB->Unlock(); g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 ); if( SUCCEEDED( g_pd3dDevice->BeginScene() ) ) {
- 342 名前:名前は開発中のものです。 [04/07/15 21:07 ID:mfzLmHcI.net]
- g_pd3dDevice->SetStreamSource( 0, g_pVB, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX ); g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLEFAN, 0, 2 ); g_pd3dDevice->EndScene(); } g_pd3dDevice->Present( NULL, NULL, NULL, NULL ); } LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch( msg ) { case WM_DESTROY: Cleanup(); PostQuitMessage( 0 ); return 0; } return DefWindowProc( hWnd, msg, wParam, lParam ); } INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT ) { g_hinst=hInst; WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, "D3D Tutorial", NULL }; RegisterClassEx( &wc ); HWND hWnd = CreateWindow( "D3D Tutorial", "課題", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, 640, 480, GetDesktopWindow(), NULL, wc.hInstance, NULL ); g_hwndMain=hWnd; InitJoystick(); if( SUCCEEDED( InitD3D( hWnd ) ) )
|

|