Проблема с DirectX
| |
maXimBestUA | Дата: Воскресенье, 12 Августа 2012, 19:48 | Сообщение # 1 |
почетный гость
Сейчас нет на сайте
| При изучении DirectX столкнулся с такой проблемой, не могу пройти урок по выводу текста на экран, как я понял представленный пример в книге просто устарел, вот сама функция из примера:
Code VOID DrawMyText(LPDIRECT3DDEVICE9 pDirect3DDevice,HFONT hFont, char* StrokaTexta,int x,int y,int x1,int y1,D3DCOLOR MyColor) { // Создаем шрифт hFont = CreateFont(30,10,0,0,FW_NORMAL,FALSE,FALSE,0,1,0, 0,0,DEFAULT_PITCH|FF_MODERN,"Arial"); // Координаты прямоугольника Rec.left = x; Rec.top = y; Rec.right = x1; Rec.bottom = y1;
D3DXCreateFont(pDirect3DDevice, hFont, &pFont); pFont->Begin(); pFont->DrawText(StrokaTexta, -1, &Rec, DT_WORDBREAK, MyColor); pFont->End(); }
Первая ошибка была в функции D3DXCreateFont, но в интернете я нарыл что в ней больше 3 параметров. Следующие ошибки идут в последних трех строках, про Begin() и End() я вообще ничего не нарыл, что с ними делать? В DrawText я узнал что не хватает одного параметра про которого в книге ничего не сказано, за что он отвечает?
Сообщение отредактировал maXimBestUA - Воскресенье, 12 Августа 2012, 19:50 |
|
| |
Archido | Дата: Воскресенье, 12 Августа 2012, 19:59 | Сообщение # 2 |
Сэнсэй
Сейчас нет на сайте
| Это просто код для DirectX 8. Вы какой DX используете? Есть пример для 9-го.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
maXimBestUA | Дата: Воскресенье, 12 Августа 2012, 20:06 | Сообщение # 3 |
почетный гость
Сейчас нет на сайте
| Я использую DirectX9, и в книге пишут что примеры для 9 версии. Спасибо за пример.
|
|
| |
Archido | Дата: Воскресенье, 12 Августа 2012, 20:16 | Сообщение # 4 |
Сэнсэй
Сейчас нет на сайте
| Мм, возможно там используется очень приочень старый вариант DX 9 SDK. А что за книга?
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
maXimBestUA | Дата: Воскресенье, 12 Августа 2012, 20:28 | Сообщение # 5 |
почетный гость
Сейчас нет на сайте
| Горнаков С. DirectX 9. Уроки программирования на C++ Добавлено (12.08.2012, 20:28) --------------------------------------------- Вот еще отказывается работать функция Code D3DXCreateFont( pDirect3DDevice, // указатель на устройство IDirect3DDevice9 18, // высота шрифта 0, // ширина шрифта; если передать 0, то установится автоматически 1, // толшина шрифта: от нуля, до тысячи 0, // уровень MIP 0, // наклонный шрифт RUSSIAN_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, // шаг и семейство шрифта "Arial", // имя шрифта (Arial, Times New Roman...) &pFont // указатель на ID3DXFont );
Code main.cpp|51|undefined reference to `D3DXCreateFontA@48'
Не понимаю что ему не нравится.
|
|
| |
Archido | Дата: Воскресенье, 12 Августа 2012, 20:36 | Сообщение # 6 |
Сэнсэй
Сейчас нет на сайте
| Горнаков подустарел уже и правда, да и ошибки (опечатки) там какие-то были. Как вариант, можно еще почитать - "Фрэнк Луна. Введение в программирование трехмерных игр с DirectX 9.0".
Quote (maXimBestUA) Не понимаю что ему не нравится. Надо подрубить d3dx9.lib файл, в MSVS это вяглядит как " pragma comment(lib, "d3dx9.lib'); "
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
_pDirectDevice | Дата: Воскресенье, 12 Августа 2012, 20:38 | Сообщение # 7 |
частый гость
Сейчас нет на сайте
| В книги горнакова по другому,вот норм
Code D3DXFONT_DESCA mDesc; LPD3DXFONT mFont;
//создаем описание шрифта ZeroMemory(&mDesc,sizeof(D3DXFONT_DESCA)); mDesc.Height= 85; mDesc.Width = 52; mDesc.Italic = false; mDesc.Weight = 500; mDesc.CharSet = DEFAULT_CHARSET; strcpy(mDesc.FaceName,"Stencil Std");
D3DXCreateFontIndirect(mDirectDevice,&mDesc,&mFont);
//////////////////////////////////////в методе update RECT rect; rect.right = 1200; rect.bottom =200; rect.left = 0; rect.top =100;
std::string name = "BlaBla";
mFont->DrawText(NULL,const_cast<LPCSTR>(name.c_str()),name.length(), &rect,DT_TOP | DT_LEFT,D3DCOLOR_XRGB(255,255,255));
Сообщение отредактировал _pDirectDevice - Воскресенье, 12 Августа 2012, 20:40 |
|
| |
maXimBestUA | Дата: Понедельник, 13 Августа 2012, 11:06 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| Archido, Библиотеки я подключил, у меня они .a формата под CodeBlock. Вот я скачал книгу "Фрэнк Луна" Там тоже пишут об устаревших функциях.
|
|
| |
Archido | Дата: Понедельник, 13 Августа 2012, 13:31 | Сообщение # 9 |
Сэнсэй
Сейчас нет на сайте
| Quote (maXimBestUA) Библиотеки я подключил, у меня они .a формата под CodeBlock Они не должны быть .а формата, т.к. официально с DX SDK идут только .lib файлы и они прекрасно понимаются Code::Blocks, все остальное от лукавого (я подозреваю, что они идут вместе со средой, а лучше использовать то, что идет вместе с SDK).
Quote (maXimBestUA) Вот я скачал книгу "Фрэнк Луна" Там тоже пишут об устаревших функциях. Там точно такие же проблемы (Font) или уже чего другое? К сожалению, на русский перевели только самую первую его книгу по DX и она тоже "устарела" (в плане несоответствия ф-ций, сама книга хороша). Имеется более современный вариант под DX 9.0c, но эта книга на английском.
Как вариант решения проблем, можно скачать более старый DX SDK, например такой.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
maXimBestUA | Дата: Понедельник, 13 Августа 2012, 15:14 | Сообщение # 10 |
почетный гость
Сейчас нет на сайте
| Quote (Archido) Они не должны быть .а формата, т.к. официально с DX SDK идут только .lib файлы и они прекрасно понимаются Code::Blocks, все остальное от лукавого (я подозреваю, что они идут вместе со средой, а лучше использовать то, что идет вместе с SDK). Я читал что компилятор в CodeBlock не читает .lib формат, читает .a формат, и библиотеки специальные для DirectX шли в комплекте с программой libd3d9.a и libd3dx9d.a, это те с которыми я пока имел дело.
Quote (Archido) Как вариант решения проблем, можно скачать более старый DX SDK, например такой. Ну этого лучше наверное не делать, я гдето читал что у DirectX недостаток такой что изменяется сильно, лучше уж учить поновее чем потом переучивать все.
|
|
| |
Archido | Дата: Понедельник, 13 Августа 2012, 16:25 | Сообщение # 11 |
Сэнсэй
Сейчас нет на сайте
| Quote (maXimBestUA) Я читал что компилятор в CodeBlock не читает .lib формат, читает .a формат, и библиотеки специальные для DirectX шли в комплекте с программой libd3d9.a и libd3dx9d.a, это те с которыми я пока имел дело. Мм, да, это если используется компилятор MinGW. Мне интересно чем обусловлен выбор Code::Blocks + MinGW? К Code::Blocks можно прикрутить много других компиляторов, в том числе и MSVC (просто компилятор). Тогда будет гораздо меньше проблем. А можно вообще полноценную MSVS студию взять и проблем вообще не станет Если программируется под DX, то очень желательно взять майкрософтский компилятор и использовать родные lib'ы из DX SDK без лишних телодвижений. К MinGW тоже можно .lib прикрутить на самом деле, но гемороя в итоге гораздо больше.
Quote (maXimBestUA) Ну этого лучше наверное не делать, я гдето читал что у DirectX недостаток такой что изменяется сильно, лучше уж учить поновее чем потом переучивать все. Меняется сильно от версии к версии: 8 -> 9; 9 -> 10/11; Внутри версий различия минимальны - несколько ф-ций, возможно чутка интерфейсов и т.д. Незначительно вообщем. Поэтому это не играет большой роли.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
maXimBestUA | Дата: Среда, 15 Августа 2012, 12:57 | Сообщение # 12 |
почетный гость
Сейчас нет на сайте
| Quote (Archido) Мм, да, это если используется компилятор MinGW. Мне интересно чем обусловлен выбор Code::Blocks + MinGW? К Code::Blocks можно прикрутить много других компиляторов, в том числе и MSVC (просто компилятор). Тогда будет гораздо меньше проблем. А можно вообще полноценную MSVS студию взять и проблем вообще не станет Если программируется под DX, то очень желательно взять майкрософтский компилятор и использовать родные lib'ы из DX SDK без лишних телодвижений. К MinGW тоже можно .lib прикрутить на самом деле, но гемороя в итоге гораздо больше.
Когда я начинал учить C++ я использовал Visual Studio, но сейчас у меня проблемы с компом, нету прав администратора, и установить Visual Studio я не могу, как и DirectX SDK (Ели нашел все эти d3d9.h). В компиляторах если честно не разбираюсь, но если MSVS лучше то подскажите как подключить)
|
|
| |
Archido | Дата: Среда, 15 Августа 2012, 17:42 | Сообщение # 13 |
Сэнсэй
Сейчас нет на сайте
| maXimBestUA Как выяснилось, MinGW компилятор (который в Code::Blocks по умолчанию идет) без проблем линкует С'шные lib'ы (не С++), созданные с помощью MSVC. Поэтому можно просто напрямую использовать хедеры и либы из DX SDK и не париться со сменой компилятора.
Quote (maXimBestUA) сейчас у меня проблемы с компом, нету прав администратора, и установить Visual Studio я не могу, как и DirectX SDK Это весьма печально
Quote (maXimBestUA) Ели нашел все эти d3d9.h Т.е. найдены они на просторах интернета? И линкуется все это с .a библиотеками, которые идут в комплекте с MinGW? Если так, то надо бы найти и .lib'ы тоже. Т.к. есть вероятность, что определение в .h и реализация в .lib(dll) не совпадает (ибо стандартные *.a там очень старые), поэтому и возникает ошибка "undefined reference to 'D3DXCreateFontA@48'"
Добавлено (15.08.2012, 17:42) --------------------------------------------- Да, в d3dx9.a у MinGW красуется ф-ция "D3DXCreateFont@12", с тремя параметрами и без "A" в конце. Старая версия вообщем, нужно либо старые .h поискать, либо .lib поновее найти
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Среда, 15 Августа 2012, 17:44 |
|
| |
maXimBestUA | Дата: Четверг, 16 Августа 2012, 12:41 | Сообщение # 14 |
почетный гость
Сейчас нет на сайте
| Толи у меня руки кривые толи еще чего, но не получается подключить lib. Добавлено (16.08.2012, 12:41) --------------------------------------------- Подключился только один единственный d3d9.lib, с d3dx9.lib уже ошибки пишет.
Сообщение отредактировал maXimBestUA - Четверг, 16 Августа 2012, 12:40 |
|
| |
Archido | Дата: Четверг, 16 Августа 2012, 12:43 | Сообщение # 15 |
Сэнсэй
Сейчас нет на сайте
| Quote (maXimBestUA) Подключился только один единственный d3d9.lib, с d3dx9.lib уже ошибки пишет. Что пишет?
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
maXimBestUA | Дата: Четверг, 16 Августа 2012, 12:45 | Сообщение # 16 |
почетный гость
Сейчас нет на сайте
| Code YGHXZ]+0x75)||undefined reference to `_except_list' Warning: .drectve `/DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" ' unrecognized
|
|
| |
Archido | Дата: Четверг, 16 Августа 2012, 12:58 | Сообщение # 17 |
Сэнсэй
Сейчас нет на сайте
| maXimBestUA Напиши линк откуда качал набор .h и .lib, там видимо d3dx9 полноценная статическая библиотека (c новым SDK все линкуется на ура, ибо там она обеспечивает только связь с dll).
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
|
|
| |
maXimBestUA | Дата: Четверг, 16 Августа 2012, 13:08 | Сообщение # 18 |
почетный гость
Сейчас нет на сайте
|
Сначало я просто пробывал подключить библиотеки из этого архива, а .h файлы не брал, но попробовал взять и появилась уже другая ошибка Code \desktop\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.5.2\..\..\..\..\include\dxfile.h|240|error: stray '\32' in program| Вывод один, нужно брать себе личный ноут, и тогда такой запары не будет.
Сообщение отредактировал maXimBestUA - Четверг, 16 Августа 2012, 13:08 |
|
| |
Archido | Дата: Четверг, 16 Августа 2012, 13:53 | Сообщение # 19 |
Сэнсэй
Сейчас нет на сайте
| Да, это очень старый sdk и там полноценная d3dx9.lib, которая не слинкуется с приложением компилятором MinGW. Зато можно слинковать c d3dx9d.lib, но тогда придеться еще поискать d3dx9d.dll , которые могут быть разных версий и разного набора ф-ций.
Quote (maXimBestUA) \desktop\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.5.2\..\..\..\..\include\dxfile.h|240|error: stray '\32' in Эта ошибка возникает потому, что там в конце файла написан бред и его нужно удалить, тогда скомпилится, но не слинкуется.
Вообще проще чуть поновее поискать все эти файлы.
---
Например такие и такие. C ними все собирается, возможно еще потребует какую-нибудь d3dx9_xx.dll, но не должен. Во всяком случае последнюю будет проще найти.
C++ - он особенный. С помощью него можно не только выстрелить себе в ногу, но и повеситься в пустой комнате:)
Сообщение отредактировал Archido - Четверг, 16 Августа 2012, 14:19 |
|
| |
maXimBestUA | Дата: Четверг, 16 Августа 2012, 16:18 | Сообщение # 20 |
почетный гость
Сейчас нет на сайте
| Quote (Archido) Например такие и такие. Скачал два эти архива но чтото они поначалу не захотели компилится, скачал также либы оттуда и все скомпилилось) Только текст закарлючками но это уже не важно. Большое спасибо за помощь.
|
|
| |
|