Запомняне

» Здравейте
[ Вход :: Регистриране ]
 » Начало » Li Форуми » Li Статии » Интересно » Разработването на игри - 3D и какво още?
  • Страница 1 от 1 Skip to Page:
  • 1
Тема: Разработването на игри - 3D и какво още?
Мнение #1 Skip to the next post in this topic.
Написано на: Септември 02 2005, 15:55
Zero_effect
 

Avatar




Група: Li maniacs
Мнения: 489
Регистриран: Юли 2005

Оценка: 5

Offline
Забележка: Тази статия е ориентирана към хората интересуващи се от софтуера, който може да се употребява за разработване на 3D игри. Статията не съдържа линкове към документация, книги, справочници и други пособия за изучаване начина на работа със софтуер.


Инструменти за програмиране

Разбира се игрите са вид програми и ще ви трябват някои приложения за програмиране като компилатори и/или интерпретатори за вашия език за програмиране. Такива са:
- GCC за C/C++, Objective C, Ada, Java
- Python
- JDK - предпочитания компилатор/интерпретатор за Java

За да изработите сорс кода на играта, ще ви трябва добър текстов редактор като Emacs, gedit, vim, kwrite и други, който да може да поддържа синтактично подчертаване (syntax highlighting) и други екстри.
Също така ще се нуждаете от build система. Най-добрият вариант е да използвате autotools като най-портативни от тях са: autoconf, automake, libtool.
Ако класическият метод за изграждане на програми не Ви е удобен, може да използвате приложения като kdevelop, Anjuta,code::blocks, Wing IDE, които правят доста неща вместо вас и по този начин улесняват работата ви.


Библиотеки

Преди да започнете да разработвате нещо свързано с 3D силно ви препоръчвам да инсталирате драйверите на вашата видео карта, които идват с ускорена версия на OpenGL.

След основните приложения за програмиране идват 3D енджините, които се грижат за изобразяването на графиката в играта. Разбира се, някои ще тръгнат по по-трудния път като почнат да изработват свой собствен 3D енджин - при това положение ви трябва OpenGL и SDL. Но ако искате да спестите време за изработване на 3D енджин, съществуват много добри решения с отворен код като Crystal Space, Irrlicht и OGRE. Задължително разгледайте сайтовете на енджините, за да откриете линкове към чудесни места, където да научите как се използват.

Освен 3D енджин ще Ви трябва и графичен интерфейс в играта, като менюта, таблици, бутони. Може да използвате CEGUI, ако нямате намерение да изработвате собствена такава система.

Много важно е вашата игра да приема сигнали от мишката и клавиатурата и да ги обработва, за да имате достъп до тази информация може да използвате библиотеки, като OIS, SDL, libGII.


Анимиране, рисуване и други

Енджините са хубаво нещо, но без графични редактори не биха ви свършили работа. Доста професионално направен 3D редактор е blender, който поддържа всички съвременни техники за създаване и редактиране на този тип изображения. Също така хубаво е да имате някой обикновен графичен редактор, с който да създавате вашите текстури, концепционни картинки и други типове изображения. В случая Gimp се смята за един от най-добрите.


Редактирано от stumps на Септември 17 2006, 00:56
Контакти:  Zero_effect

  • AOL  AOL:
  • ICQ  ICQ: 94584818
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Мнение #2
Skip to the previous post in this topic. Написано на: Август 18 2013, 22:24

Avatar




Група: Li maniacs
Мнения: 489
Регистриран: Юли 2005

Оценка: 5

Offline
Минаха се известно количество години, та аз като леко по-напреднал разработчик на игри(разбирайте, че това всъщност работя) реших да споделя моите мъдрости на тема програмиране на игри под Линукс. Но първо мисля да въведа малко подобрения на предното ми мнение.

Инструменти за програмиране

Напоследък Clang набира все повече популярност. Основната причина до голяма степен е, че това е компилаторът, който се използва върху Mac. Той до голяма степен е съвместим с gcc. Предлага значително по-подробни грешки с анализ защо не може да бъде компилиран даден фрагмент код, вместо да се предлага на потребителя списък от очакваните лексиоми от кода за изчитане. Това, което би създало проблеми е внасянето му в работещ процес за компилиране на приложение. Кода, който аз бих предложил за toolchain на CMake е:

Код: 

INCLUDE (CMakeForceCompiler)

SET(IS_CLANG on)
SET(CMAKE_C_FLAGS_INIT                "-Wall")
SET(CMAKE_C_FLAGS_DEBUG_INIT          "-g")
SET(CMAKE_C_FLAGS_MINSIZEREL_INIT     "-Os -DNDEBUG")
SET(CMAKE_C_FLAGS_RELEASE_INIT        "-O4 -DNDEBUG")
SET(CMAKE_C_FLAGS_RELWITHDEBINFO_INIT "-O2 -g")

SET(CMAKE_CXX_FLAGS_INIT                "-Wall")
SET(CMAKE_CXX_FLAGS_DEBUG_INIT          "-g")
SET(CMAKE_CXX_FLAGS_MINSIZEREL_INIT     "-Os -DNDEBUG")
SET(CMAKE_CXX_FLAGS_RELEASE_INIT        "-O4 -DNDEBUG")
SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT "-O2 -g")

CMAKE_FORCE_C_COMPILER("/usr/bin/clang" "Clang")
CMAKE_FORCE_CXX_COMPILER("/usr/bin/clang++" "Clang++")
SET(CMAKE_RANLIB "/usr/bin/llvm-ranlib" CACHE INTERNAL STRING)
SET(CMAKE_AR "/usr/bin/llvm-ar" CACHE INTERNAL STRING)
SET(CMAKE_LINKER "/usr/bin/llvm-ld" CACHE INTERNAL STRING)
SET(CMAKE_C_LINK_EXECUTABLE "/usr/bin/llvm-ld <OBJECTS> -o  <TARGET> <CMAKE_C_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>")
SET(CMAKE_CXX_LINK_EXECUTABLE "/usr/bin/llvm-ld <OBJECTS> -o  <TARGET> <CMAKE_CXX_LINK_FLAGS> <LINK_FLAGS> <LINK_LIBRARIES>")
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS "")
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "")
SET(CMAKE_SHARED_LIBRARY_RUNTIME_CXX_FLAG "-Xlinker=-rpath,")
SET(CMAKE_SHARED_LIBRARY_RUNTIME_C_FLAG "-Xlinker=-rpath,")


Което ни навежда на следващия проблем. Защо CMake, а не добрите стари auto tools. Основната причина е лесна портативност. Тоест, лесно може да бъде генериран проект за други среди за програмиране и операционни системи. Той също така е и основната система за компилирана, използвана от kdevelop, който е за момента една от най-добрите среди за програмиране под Линукс. От друга страна се поддържа Eclipse, който би бил от интерес за Android разработчиците, понеже се предлагат готови пакети с всичко необходимо за разработка. Такъв пакет предлага nVIDIA за техните Tegra процесори.

Това, което силно бих Ви препоръчал е да използвате скриптови езици(Lua). Основната причина е продуктивност. Заедно с подобни решения би Ви било от интерес да въведете презареждане на скриптове, shader-и, ресурси и прочие. За него може да използвате inotify. За самия цикъл за чакане за събития той може да бъде обединен с epoll. Това решение е значително по-добро от постоянното сканиране на директории. Разбира се, не се гарантира, че винаги ще пристигнат събититята. При големи проблеми от този род може да се наложи да се прави и периодично сканиране. Подобно презареждане може да бъде използвано и за ресурси като текстури и геометрия.

Библиотеки

Истинските мъже пишат свой двигател... ъм, не много мъдър съвет. На първо време, ако се учите, по-добре ползвайте някой от горе изброените двигатели. Все още предлагат достатъчно адекватна графика. Друг вариант е да ползвате тежката артилерия - нещо с признание в индустрията. С други думи: Unity. Разбира се, тук фактор е колко искате да бъдете обвързани с компанията рабработчик. От друга страна, нека все пак да преположим, че искате да си напишете собствен двигател. Това, което ще се ползва е OpenGL. Първата трагедия ще е как да си инициализате контекст за рендериране. Разбира се, за това си има решение и него може да намерите тук. Само ще спомена, че на някои платформи това е много космат проблем, понеже се изисква междинен контекст преди да се създаде истинския OpenGL 3.0+. След като имате контекст идва проблемът как да се заредят разширенията. GLEW е добър вариант. Някои хора обаче не обичат зависимости, понеже постоянно чупят кода. Зареждането на символите не е толкова голям проблем. Ползва се glXGetProcAddress и просто трябва някъде да си налеете указателите. Някои, които не им се занимава с междинни интерфейси ги изливат в глобалното пространство. Това не е кой знае каква трагедия и няма да Ви счупи дизайна. Виж, ако имате неблагоразумието да си напляскате глобални състояние и странични ефекти на половината функции, вече е друго нещо(който се е опитвал да разпаралелява подобна каша знае).

Със сегашното навлизане на Steam върху Линукс и мистериозният Steam box се очаква да се пръкнат пълчища от разработчици, които портват игрите си върху платформата. Именно затова препоръчителното четиво за всички, които портват е презентацията на Valve от тазгодишното GDC 2013.

В предната ми статия съм пропуснал да говоря за звук. Тук вариантите са SDL за най-простите случаи и OpenAL. OpenAL е за хора със здрави нерви, а също така напоследък е поизчезнал. Хората, които имат пари може да ползват и FMOD.

Анимиране, рисуване и други

Може да добавя, че има Maya за Linux. Никога не съм я ползвал. Нямам идея дали работи. Малко е далече от определението indie.

По-страшен проблем е как да се въведе геометрията в графичния двигател. Някои веднага биха посочили COLLADA. Аз не Ви я препоръчвам, заради много ограничената имплементация на plug-in-ите. Знам, че има разни имплементации, които работят, но те са малко по-трудни за намиране(разбирайте, че са в мрежата на някой от по-големите производители на конзоли). Други варианти са FBX, който се предлага и в текстов вариант. С него има известно количество успехи. Прекарването на материали е малко по-сериозен проблем, с който и да е от тия формати. В крайна сметка е възможно и свой plug-in да разработите, но смятайте половин година напред само с това да се разправяте. В този случай имайте в предвид, че трябва да се оптимизира геометрията. Forsyth алгоритъмът е един вариант. AMD предлага свой не особено поддържан инструмент. Има и редица други, които се занимават със същия проблем.

Текстурите е хубаво да бъдат в компресиран формат, т.е. всички типове компресия, които се съхраняват в dds формат. За тази цел може да се използват инструментите, предоставени от nVIDIA.

С това завършват моите размисли по темата. И нека силата бъде с всички, които се опитват да рабработват собствени игри.

П.П. Ако имате интерес към някоя от технологиите може да се опитам да напиша и по-подробна статия.

Редактирано от Zero_effect на Август 18 2013, 22:37
Контакти:  Zero_effect

  • AOL  AOL:
  • ICQ  ICQ: 94584818
  • MSN  MSN:
  • YIM  Yahoo IM:
WEB  
Общо 1 отговор(а) от Септември 02 2005, 15:55 до сега
  • Страница 1 от 1 Skip to Page:
  • 1
 » Начало » Li Форуми » Li Статии » Интересно » Разработването на игри - 3D и какво още?

© 2014 Linux Index Project
Powered by iF 1.0.0 © 2006 ikonForums