SDL Archives | Ugolnik's blog
Опубликовано: 01.09.2018
Различные примеры и демонстрации использования OpenGL, GLSL . Все примеры просты до безобразия. Будут полезны новичку в программировании под OpenGL.
SDL 2D Bump Maping
Уроки по OpenGL . Во всех уроках используется Cone3D . Среди уроков “Установка SDL и OpenGL библиотек в Linux”, “Загрузка моделей Quake 2 и PCX текстур”, “OCTREES”, “Рендеринг в текстуру”, “Динамические карты освещённости”.
Данные уроки достаточно давно не обновлялись. В “отмазке” написано – “использовать на свой страх и риск” ;)UTvideo archives
NeonHelium – 48 уроков по OpenGL. Этот набор уроков гораздо полнее предыдущего.
Пришлось немного повозиться, что бы заставить работать данную связку. Итак, приступим:
Из списка “Link libraries” удаляем все библиотеки. Надеюсь, в будущих версиях Code::Blocks это поправят. В “Other linker options” нужно прописать “-framework SDL -framework Cocoa -framework SDL_image -framework SDL_mixer -framework OpenGL” . Ну или те библиотеки, которые вам нужны. Добавляем к проекту два файла SDLMain.h и SDLMain.m . В свойствах файла SDLMain.m указываем “Compile file” и “Link file”. В опциях проекта снимаем галку “Strip all symbols from binary” Это параметр -s компилятора. Если этого не сделать, то при попытке запуска приложения получим ошибку: dyld: lazy symbol binding failed: lazy pointer not found dyld: lazy pointer not found Trace/BPT trap После компиляции можно вручную выполнить strip . Думаю, что стоит написать скрипт, который будет после компиляции автоматически делать бандл.Полезные ссылки:
Со времен DOS наверняка многим известна игра Tyrian – отличная аркада. Сейчас найти игру с таким захватывающим геймплеем очень сложно. Разработчики открыли исходные коды (не знал, что Tyrian был написан на Turbo Pascal) и появился кроссплатформенный порт Open Tyrian . На данный момент доступны сорцы только из репозитория и архив с ресурсами из оригинальной игры.
Порт написан на C и использует SDL. Работает игра под Windows, Mac OS X, Linux, а так же на консолях PSP, GP2X, Gizmondo, GameCube, Amiga, и Nokia Internet Tablets. Лицензия GNU GPL v2.Несколько дней бился над проблемой, почему событие SDL_KEYDOWN приходит, а SDL_KEYUP нет. Ведь раньше все работало. Начал грешить на кривизну нового проекта (читай, моих рук), но этот же проект скомпилированный в Windows работал без проблем. Грешил на проблемы libsdl в Linux – перекомпилировал библиотеку – не помогает.
Совершенно случайно вспомнил о том, что недавно я установил новый билд xneur (переключатель раскладки, на подобии Punto Switcher) – в нем то и оказалась проблема. Выгрузил его из памяти – все работает!Вышла новая версия врапера glSDL . Работает весьма стабильно и в Windows. Использовать эту библиотеку очень просто. Вместо SDL.h подключается glSDL.h. Для испольиспользования OpenGL нужно добавить флаг SDL_GLSDL в SDL_SetVideoMode(). При этом сам код программы не меняется – используются стандартные вызовы SDL_*
Библиотека предназначена для вывода текста в SDL-приложениях. Отличается от прочих подобных библиотек тем, что использует вкомпиленный фонт. На данный момент не поддерживается utf-8. Используется фонт с размером матрицы символа 8x8px 1-bit. Лицензия GPLv2.
SDL_Surface* FNT_Render(const char* text, unsigned int len, SDL_Color color); SDL_Surface* FNT_RenderD(const char* text, SDL_Color color); text – указатель на текст len – длина строки color – цвет текстаСсылка на библиотеку sdl_picofont .
Небольшая статья по установке и настройке SDL для Mac OS X . В качестве IDE используется XCode.
На радостях от того, что мне вернули GamePad было решено внести поддержку джойстика в “Arkanoid: Space Ball” . Написать поддержку джойстика в игре оказалось для меня проще, чем подключить сам джойстик. На самом деле, джойстик подключается очень просто. Но я не заметил, что одна опция в конфиге кернела не была установлена. Но теперь все в порядке ;)
UPD: Что то я погорячился – под Windows функция SDL_NumJoysticks() возвращает “0” , хотя сама Windows его видит и адекватно определяет нажатия на кнопки.
По своей глупости нарвался на ошибку. Есть обработчик ивентов (клавиатура, мышь, джойстик), у мыши кроме состояния кнопок есть еще координаты и смещение относительно последней выборки. Код выглядит приблизительно так:
SDL_Event evt; g_nMouseDX = 0; g_nMouseDY = 0; while(SDL_PollEvent(&evt)) { switch(evt.type) { case SDL_MOUSEMOTION: g_nMouseDX += evt.motion.xrel; g_nMouseDY += evt.motion.yrel; break; } }Так вот, моя ошибка была тут:
g_nMouseDX += evt.motion.xrel; g_nMouseDY += evt.motion.yrel;Я просто не учитывал, что при выполнении этого кода на медленном компьютере, ивентов за каждый фрейм может приходить более одного. И по этой причине я терял данные о смещении мыши. Простая замена присвоения “=” на добавление “+=” решило проблему.
Сегодня | Завтра | ||
USD | 32.62 | 32.50 | |
EUR | 39.90 | 39.92 |
Обменник | Переходов |
Wmchanger | 6 |
E-Market | 5 |
WMtoCash.com | 4 |
Str-Money | 3 |
Hot-Change | 3 |
Вы можете получить WMR-бонус в размере 0,01-0,10 WMR на свой кошелек 1 раз в сутки | |
Кошелек
|
|
Код
|
|
Обмен Webmoney |