Попробовал написать код исходя из уроков по этой теме в соответствующем разделе.Код компилируется, но не работает.Помогите разобраться плиз
#define INITGUID
#pragma comment(lib, "dxguid.lib")
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "dinput8.lib")
#define DIRECTINPUT_VERSION 0x0800
#include <dinput.h>
#include <Windows.h>
#include <d3d9.h>
struct vertex
{
float x,y,z;
unsigned long color;
};
LRESULT __stdcall WndProc(HWND, UINT, WPARAM, LPARAM);
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
wc.style = CS_OWNDC;
wc.lpfnWndProc = WndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)(6);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hInstance = hInstance;
wc.lpszClassName = L"class";
wc.lpszMenuName = NULL;
RegisterClass(&wc);
HWND hWnd = CreateWindow(L"class",L"Инициализация Direct3D",
WS_OVERLAPPEDWINDOW,200,100,
500,500,NULL,NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
IDirectInput8* di; // объект DirectInput
IDirectInputDevice8* didev; // устройство DirectInput
DirectInput8Create(hInstance, // экземпляр приложения
DIRECTINPUT_VERSION, // версия DirectInput
IID_IDirectInput8, // глобальный идентификатор (COM)
(void**)&di, // адрес указателя объекта DirectInput
NULL);
di->CreateDevice(GUID_SysMouse, // устройство ввода с мыши
&didev, // адрес указателя на устройство
NULL);
didev->SetDataFormat(&c_dfDIMouse);
didev->SetCooperativeLevel(hWnd,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
didev->Acquire();
int dx=0,dy=0,dz=0;
DIMOUSESTATE dims;
ZeroMemory(&dims,sizeof(dims));
IDirect3D9* d3d = NULL; // объект Direct3D
IDirect3DDevice9* dev = NULL; // устройство (видеокарта)
d3d = Direct3DCreate9(D3D_SDK_VERSION);
D3DPRESENT_PARAMETERS pp;
ZeroMemory(&pp,sizeof(pp));
pp.BackBufferWidth = 500;
pp.BackBufferHeight = 500;
pp.BackBufferFormat = D3DFMT_X8R8G8B8;
pp.BackBufferCount = 1;
pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.hDeviceWindow = hWnd;
pp.Windowed = true;
d3d->CreateDevice(D3DADAPTER_DEFAULT,
D3DDEVTYPE_REF,hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&pp, &dev);
IDirect3DVertexBuffer9* vb = NULL;
dev->CreateVertexBuffer( 3* sizeof(vertex), D3DUSAGE_WRITEONLY,
D3DFVF_XYZ|D3DFVF_DIFFUSE, D3DPOOL_DEFAULT,
&vb,NULL);
dev->SetRenderState(D3DRS_FILLMODE,D3DFILL_WIREFRAME);
vertex vertices[] =
{
{ -2, -1, 0, 0xff000000},
{ 0, 2, 0, 0xff000000},
{ 2, -1, 0, 0xff000000},
{0, -4, 0, 0xff000000},
{ -2, -1, 0, 0xff000000},
{ 0, 2, 0, 0xff000000},
};
D3DMATRIX matWorld;
D3DMATRIX matCam;
D3DMATRIX matProj;
matWorld._11=1; matWorld._12=0; matWorld._13=0; matWorld._14=0;
matWorld._21=0; matWorld._22=1; matWorld._23=0; matWorld._24=0;
matWorld._31=0; matWorld._32=0; matWorld._33=1; matWorld._34=0;
matWorld._41=0; matWorld._42=0; matWorld._43=0; matWorld._44=1;
matCam._11=1; matCam._12=0; matCam._13=0; matCam._14=0;
matCam._21=0; matCam._22=1; matCam._23=0; matCam._24=0;
matCam._31=0; matCam._32=0; matCam._33=1; matCam._34=0;
matCam._41=0; matCam._42=0; matCam._43=10; matCam._44=1;
matProj._11=1; matProj._12=0; matProj._13=0; matProj._14=0;
matProj._21=0; matProj._22=1; matProj._23=0; matProj._24=0;
matProj._31=0; matProj._32=0; matProj._33=1; matProj._34=1;
matProj._41=0; matProj._42=0; matProj._43=-1; matProj._44=0;
dev->SetTransform( D3DTS_WORLD, &matWorld);
dev->SetTransform( D3DTS_VIEW, &matCam);
dev->SetTransform( D3DTS_PROJECTION, &matProj );
void* vb_vertices;
vb->Lock(0,sizeof(vertices),(void**)&vb_vertices,0);
memcpy(vb_vertices,vertices,sizeof(vertices));
vb->Unlock();
dev->SetStreamSource(0,vb,0,sizeof(vertex));
dev->SetStreamSource(1,vb,0,sizeof(vertex));
dev->SetFVF(D3DFVF_XYZ|D3DFVF_DIFFUSE);
MSG msg;
while (1)
{dx = 0;
dy = 0;
dz=0;
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
HRESULT hr=didev->GetDeviceState(sizeof(DIMOUSESTATE),&dims);
if FAILED(hr) return 0;
dev->Clear(0,NULL,D3DCLEAR_TARGET,
D3DCOLOR_XRGB(231,255,255),1.0f,0);
dx = dims.lX;
dy = dims.lY;
dz = -dims.lZ;
if (dims.rgbButtons[0] & 0x80)
{
for (int i = 0; i < 6; i++)
vertices[i].color = 0xffff0000;
}
if (dims.rgbButtons[1] & 0x80)
{
for (int i = 0; i < 6; i++)
vertices[i].color = 0xff00ff00;
}
if (dims.rgbButtons[2] & 0x80)
{
for (int i = 0; i < 6; i++)
vertices[i].color = 0xff0000ff;
}
for (int i = 0; i < 6; i++)
{
vertices[i].x += dx;
vertices[i].y -= dy;
}
matWorld._43 += dz/100;
dev->SetTransform(D3DTS_WORLD, &matWorld);
dev->BeginScene();
for(int i=0;i<3;i++){dev->DrawPrimitive(D3DPT_TRIANGLELIST,i,1);}
dev->EndScene();
dev->Present(NULL,NULL,NULL,NULL);
}
if(didev!=NULL){
didev->Unacquire();
didev->Release();}
if(di!=NULL){di->Release();}
if (dev != NULL)
dev->Release();
if (d3d != NULL)
d3d->Release();
return 0;
}
LRESULT __stdcall WndProc(HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_CLOSE:
exit(0);
case WM_QUIT:
return 0;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;}