Grosner
Новенький
Offline
|
|
« : 30-10-2010 16:16 » |
|
Плз помогите не может запуститься прога кидаю код //Создание шрифта и вывод текста на экран в Direct3D #include <windows.h>//подключаем заголовочный файл Windows #include <d3d9.h>//подключаем заголовочный файл DirectX SDK 9 #include <d3dx9.h>//заголовочный файл с матричными функциями #include <d3dx9core.h>//подключаем файл для работы со шрифтами #include "TCHAR.h"
//============================================================================= //глобальные переменные //============================================================================= LPDIRECT3D9 pDirect3D = NULL;//указатель на главный интерфейс Direct3D9 LPDIRECT3DDEVICE9 pDirect3DDevice = NULL;//указатель на интерфейс устройства Direct3D9
LPDIRECT3DVERTEXBUFFER9 pVertexBuffer = NULL; //глобальная переменная-указатель на буфер вершин LPDIRECT3DINDEXBUFFER9 pIndexBuffer = NULL; //указатель на буфер индексов вершин
LPD3DXFONT pFont = NULL;//указатель на интефейс, отвечающий за работу со шрифтом RECT Rect;//переменная, которая будет задавать область вывода на экран HFONT hFont;//переменная, в которой находится сам шрифт
//============================================================================= //структуры //============================================================================= struct CUSTOMVERTEX //структура вершины { FLOAT x, y, z;//координаты FLOAT nx, ny, nz;//нормали }; #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL)//описываем свой формат D3DFVF_CUSTOMVERTEX содержания вершин в отдельном потоке данных
//============================================================================= //функции //============================================================================= //инициализация Direct3D9 HRESULT InitialDirect3D(HWND hWnd) { if (NULL == (pDirect3D = Direct3DCreate9(D3D_SDK_VERSION)))//создаём объект главного интерфейса Direct3D9 return E_FAIL; D3DDISPLAYMODE Display;//режим дисплея if (FAILED(pDirect3D -> GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &Display)))//получаем текущий формат дисплея return E_FAIL;
D3DPRESENT_PARAMETERS Direct3DParameter;//объект параметров представления ZeroMemory(&Direct3DParameter, sizeof(Direct3DParameter)); Direct3DParameter.Windowed = FALSE;//оконный или полноэкранный режим Direct3DParameter.SwapEffect = D3DSWAPEFFECT_DISCARD;//параметр для определения обмена буферов Direct3DParameter.BackBufferFormat = Display.Format;//формат поверхности заднего буфера Direct3DParameter.EnableAutoDepthStencil = TRUE;//включаем z-буфер Direct3DParameter.AutoDepthStencilFormat = D3DFMT_D16;//формат поверхности z-буфера Direct3DParameter.BackBufferWidth = GetSystemMetrics(SM_CXSCREEN);//устанавливаем ширину заднего буфера равную ширине нашего экрана Direct3DParameter.BackBufferHeight = GetSystemMetrics(SM_CYSCREEN);//устанавливаем высоту заднего буфера равную высоте нашего экрана Direct3DParameter.BackBufferCount = 3;//устанавливаем количество буферов Direct3DParameter.FullScreen_RefreshRateInHz = Display.RefreshRate;//устанавливаем частоту обновления экрана для полноэкранного режима //создание объекта для интерфейса устройства if (FAILED(pDirect3D -> CreateDevice(D3DADAPTER_DEFAULT, //видеокарта D3DDEVTYPE_HAL, //тип устройства (использовать ли акселерацию видеокарты) hWnd, //дескриптор главного окна D3DCREATE_SOFTWARE_VERTEXPROCESSING, //как будет происходить обработка вершин &Direct3DParameter, //параметры пердставления &pDirect3DDevice))) //указатель на интерфейс IDirect3DDevice9 return E_FAIL; pDirect3DDevice -> SetRenderState(D3DRS_CULLMODE, D3DCULL_CW);//включаем отсечение по часовой стрелке pDirect3DDevice -> SetRenderState(D3DRS_ZENABLE, D3DZB_TRUE);//включаем z-буфер return S_OK; }
void MyTextOut(long x1, long y1, long x2, long y2) { D3DCOLOR FontColor = D3DCOLOR_ARGB (255,0,0,255); RECT pRect; //переменная, которая будет задавать область вывода на экран D3DXCreateFont (pDirect3DDevice, 20, 0, FW_BOLD, 0, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, TEXT ("Arial"), &pFont); // координаты прямоугольнка pRect.left = x1; pRect.top = y1; pRect.right = x2; pRect.bottom = y2; // Вывод текста pFont->DrawText(NULL, _T("Hello World"), -1, &pRect, 0, FontColor); }
//рендеринг VOID RenderingDirect3D() { if (pDirect3DDevice == NULL) //проверяем было ли создано устройство без ошибок return; //очистка заднего буфера pDirect3DDevice -> Clear(0, //номер массива прямоугольников, подвергаюзихся очистке (0 - для очистки всех прямоугольников) NULL, //адрес массива прямоугольников D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, //флаги, какие из поверхностей нужно очищать D3DCOLOR_XRGB(172, 221, 101),//обычный цвет для очистки 1.0f, //значение z-буфера 0); //значение буфера трафарета //************************************************************************************************** pDirect3DDevice -> BeginScene(); //начало сцены //вывод текста на экран int ix=0; MyTextOut( 10, 10, 400, 400); pDirect3DDevice -> EndScene(); //конец сцены //************************************************************************************************** //вывод на экран отрисованного из заднего буфера на передний pDirect3DDevice -> Present(NULL, //указатель на структуру RECT исходной поверхности NULL, //указатель на структуру RECT поверхности адресата NULL, //указатель на окно адресата, чья клиентская часть взята, как адрес для этого параметра представления NULL); //не используется, оставлен для совместимости }
//освобождение захваченных ресурсов VOID DeleteDirect3D() { if (pFont != NULL) pFont -> 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_KEYDOWN://обработка нажатий клавиш { if (wParam == VK_ESCAPE)//если нажали Esc PostQuitMessage(0);//то закрываем приложение return 0; } 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 hPrevInstance, LPSTR lpCmdLine, INT nCmdShow) { HWND hWnd;//дескриптор окна WNDCLASSEX WindowsClass;//класс окна MSG msg; //сообщение
WindowsClass.cbSize = sizeof(WNDCLASSEX);//размер создаваемой структуры WindowsClass.style = CS_VREDRAW|CS_HREDRAW|CS_OWNDC|CS_DBLCLKS;//стили WindowsClass.lpfnWndProc = MainWinProc;//указатель на функцию обратного вызова WindowsClass.cbClsExtra = 0;//дополнительная информация (в DirectX не используется) WindowsClass.cbWndExtra = 0;//дополнительная информация (в DirectX не используется) 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 = _T("WINDOWSCLASS");//название класса окна для создаваемого приложения WindowsClass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);//маленькая пиктограмма на панели задач if (!RegisterClassEx(&WindowsClass))//регистрируем класс окна return 0; //создаём окно if (!(hWnd = CreateWindowEx(NULL,//стиль окна _T("WINDOWSCLASS"),//класс _T("Orlan DirectX Application"),//название окна WS_OVERLAPPEDWINDOW|WS_VISIBLE,//стиль и поведение окна 0,0,//левый верхний угол 1024,768,//ширина и высота NULL,//дескриптор родительского окна NULL,//дескриптор меню hInstance,//дескриптор родительского приложения NULL))) //указатель на данные окна return 0;
if (SUCCEEDED(InitialDirect3D(hWnd))) //если удалось удачно инициализировать Direct3D { ShowWindow(hWnd,nCmdShow);//показываем окно UpdateWindow(hWnd);//обновляем окно ZeroMemory(&msg, sizeof(msg)); while(msg.message != WM_QUIT)//главный обработчик событий { if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg);//преобразование клавиатурного ввода DispatchMessage(&msg);//обработка и пересылка сообщений в WinProc } else RenderingDirect3D();//рендеринг } } return 0; }
И вот ошибки, если не трудно, отпишите как правИльно Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ _Direct3DCreate9@4 в функции "long __cdecl InitialDirect3D(struct HWND__ *)" (?InitialDirect3D@@YAJPAUHWND__@@@Z) C:\Documents and Settings\Grosner\Мои документы\Visual Studio 2010\Projects\text\text.obj text Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ _D3DXCreateFontW@48 в функции "void __cdecl MyTextOut(long,long,long,long)" (?MyTextOut@@YAXJJJJ@Z) C:\Documents and Settings\Grosner\Мои документы\Visual Studio 2010\Projects\text\text.obj text Ошибка 3 error LNK1120: 2 неразрешенных внешних элементов C:\Documents and Settings\Grosner\Мои документы\Visual Studio 2010\Projects\Debug\text.exe 1 1 text
|