Новичок
Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.9.2010
Репутация: нет Всего: нет
|
Помогите разобраться Занимаюсь по книге Горнакова, там много ошибок, я их исправил, но проблема осталась Код: Код | #include <windows.h> #include <d3d9.h> #include <d3dx9.h> #pragma comment(lib, "d3d9.lib") #pragma comment(lib, "d3dx9.lib")
LPDIRECT3D9 pDirect3D = NULL; LPDIRECT3DDEVICE9 pDirect3DDevice = NULL; LPDIRECT3DVERTEXBUFFER9 pBufferVershin = NULL; struct CUSTOMVERTEX { FLOAT x, y, z, rhw; DWORD color; };
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
HRESULT InitialDirect3D(HWND hwnd) { if(NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION))) return E_FAIL; D3DDISPLAYMODE Display; if(FAILED(pDirect3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &Display))) return E_FAIL; D3DPRESENT_PARAMETERS Direct3DParametr; ZeroMemory(&Direct3DParametr, sizeof(Direct3DParametr)); Direct3DParametr.Windowed = TRUE; Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD; //Direct3DParametr.BackBufferCount = 1; //Direct3DParametr.BackBufferHeight = 900; //Direct3DParametr.BackBufferWidth = 1440; Direct3DParametr.BackBufferFormat = Display.Format; //Direct3DParametr.AutoDepthStencilFormat = D3DFMT_D16;
if(FAILED(pDirect3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hwnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &Direct3DParametr, &pDirect3DDevice))) return E_FAIL; return S_OK; }
HRESULT InitialBufferVershin() { CUSTOMVERTEX Vershin[] = { {300.0f, 300.0f, 0.5f, 1.0f, 0x00000fff, }, {150.0f, 300.0f, 0.5f, 1.0f, 0x00000fff, }, {150.0f, 150.0f, 0.5f, 1.0f, 0x00000fff, }, };
if(FAILED(pDirect3DDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX), 0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &pBufferVershin, NULL))) return E_FAIL; VOID* pBV; if(FAILED(pBufferVershin->Lock(0, sizeof(Vershin), (void**)&pBV, 0))) return E_FAIL; memcpy(pBV, Vershin, sizeof(Vershin)); pBufferVershin->Unlock(); return S_OK; }
VOID RenderingDirect3D() { if(pDirect3DDevice == NULL) return; pDirect3DDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0, 255, 0), 1.0f, NULL); pDirect3DDevice->BeginScene(); pDirect3DDevice->SetStreamSource(0, pBufferVershin, 0, sizeof(CUSTOMVERTEX)); pDirect3DDevice->SetFVF(D3DFVF_CUSTOMVERTEX); pDirect3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1); pDirect3DDevice->EndScene(); pDirect3DDevice->Present(NULL, NULL, NULL, NULL); }
VOID DeleteDirect3D() { if(pBufferVershin != NULL) pBufferVershin->Release(); if(pDirect3DDevice != NULL) pDirect3DDevice->Release(); if(pDirect3D != NULL) pDirect3D->Release(); }
LRESULT CALLBACK MainWinProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam) { switch(msg) { //case WM_PAINT: // RenderingDirect3D(); //ValidateRect(hwnd, NULL); //break; case WM_DESTROY: { DeleteDirect3D(); PostQuitMessage(0); return(0); } // break; } return (DefWindowProc(hwnd, msg, wparam, lparam)); }
int WINAPI WinMain (HINSTANCE hinstance,HINSTANCE hprevinstanse ,LPSTR LpCmdLine,int nCmdShow) { WNDCLASSEX windowsclass; HWND hwnd; // класс HWND для создания окна MSG msg; windowsclass.cbSize = sizeof(WNDCLASSEX);//размер создаваемой структуры windowsclass.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW|CS_VREDRAW; // флаги стиля окна windowsclass.lpfnWndProc = MainWinProc; //указатель на функцию обратного вызова windowsclass.cbClsExtra = 0; // для хранения дополнительной информации windowsclass.cbWndExtra = 0; // для хранения дополнительной информации windowsclass.hInstance = hinstance; //отвечает зп экземляр созлдаваемого приложения windowsclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //для определения пиктограмы приложения windowsclass.hCursor = LoadCursor(NULL,IDC_ARROW); //для определения курсора приложения windowsclass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH); // отвечает за цвет окна windowsclass.lpszMenuName = NULL; //поле для подключения стандартного меня к окну windowsclass.lpszClassName = TEXT("WINDOWSCLASS"); //задаеться ваше названеи класса окна windowsclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);//дескриптор малой пиктограммы , которая выводиться на панель задач
if(!RegisterClassEx(&windowsclass)) return(0);
if(!(hwnd = CreateWindowEx(NULL, TEXT("WINDOWSCLASS"), TEXT("Базовое окно для DirectX"), WS_OVERLAPPEDWINDOW|WS_VISIBLE, 300, 150, 500, 400, NULL, NULL, hinstance, NULL ))) return(0);
if(SUCCEEDED(InitialDirect3D(hwnd))) { if(SUCCEEDED(InitialBufferVershin())) { ShowWindow(hwnd, SW_SHOWDEFAULT); //нарисуем окно UpdateWindow(hwnd); ZeroMemory(&msg, sizeof(msg));
while(msg.message != WM_QUIT) { if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else RenderingDirect3D();
} } } return(0); }
|
Вобщем по идее должно быть жолтое окно и синий треугольник, а у меня ничего не происходит, просто серое окно и всё, пожалуйста подскажите, что я делаю не так. M Alexeis | используйте кнопочку код |
|