Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ввод текста в DirectX на Microsoft Visual Studio 2010  (Прочитано 7886 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Grosner
Новенький

ru
Offline 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
« Последнее редактирование: 30-10-2010 16:30 от Алексей1153++ » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 30-10-2010 16:33 » 

Grosner, не подключены либы. Глянь в справочниках, какие либы нужны для
#include <d3d9.h>
#include <d3dx9.h>
#include <d3dx9core.h>

и подключи через прагму
#pragma comment(lib,"... . lib")

Добавлено через 2 минуты и 45 секунд:
ещё, погляди темы вот этого раздела

https://forum.shelek.ru/index.php/board,157.0.html
« Последнее редактирование: 30-10-2010 16:36 от Алексей1153 » Записан

Grosner
Новенький

ru
Offline Offline

« Ответ #2 : 30-10-2010 17:00 » 

Спс огромное
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines