Пятница, 26 Апреля 2024, 12:33

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Программирование » C/C++ » Проблема с DirectX
Проблема с 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 студию взять и проблем вообще не станет smile
Если программируется под 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

Это весьма печально smile

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 поновее найти smile


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 файлы не брал, но попробовал взять и появилась уже другая ошибка smile
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 biggrin , которые могут быть разных версий и разного набора ф-ций.

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)
Например такие и такие.

Скачал два эти архива но чтото они поначалу не захотели компилится, скачал также либы оттуда и все скомпилилось) Только текст закарлючками но это уже не важно. Большое спасибо за помощь.
Форум игроделов » Программирование » C/C++ » Проблема с DirectX
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг