Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2012, 17:20   #1
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию С чего начать и как продолжать?

Здравствуйте все!

Я понимаю, что тем с подобным названием очень много, но, порывшись в истории тем, я не нашел именно того, что искал сам.

Итак, есть желание изучать программирование трехмерных компьютерных игр.

Пока что я пишу тетрис и параллельно читаю учебник по С++ (Х. Дейтел, П. Дейтел - Как программировать на С++), конечно, пока что многое еще предстоит освоить, еще допускаю глупые ошибки по непривычке и по незнанию. Но, в конце концов, С++ будет осовен на некотором достаточном уровне (в любом случае изучить и освоить в совершенстве сразу невозможно) и посем у меня "заранее" возник такой вопрос.

А с чего начать вникать в программирование трехмерных компьютерных игр? Как они устроены?

Сейчас я перешел на 3й курс универа ( учусь на ИТ ), у нас такой специализации нет, даются основы (физика, математика, дискретная математика, алгоритмизация, сейчас будет ассемблер, основы проектирования ПО и т.д. и т.п.).

Насколько я сам чувствую, необходимо курс высшей математики пройти (что-то хорошо известное просто пробежать, а на чем-то недостаточно хорошо усвоенном необходимо остановиться, дабы не было огромных дыр в знаниях, которые не позволяют двигаться дальше), а так же механики. А так же дискретной математики, но с ней у меня проблем особо нет. (В любом случае, по меркам нашего универа я "отличник", хотя сам себя таковым не считаю и мне страшно, что я-то как бы ничего и не учусь, в универе нас учат основам и учат думать, применять и интегрировать навыки и знания из разных наук для решения задач, но это я понял только на 4м семестре и теперь более-менее определился с тем, что я хочу делать дальше.)

Итак, вопрос номер 1:
Какие учебники и справочники по "классическим наукам" (математика, физика, дискретка, дифференциалы, интегралы и т.д. и т.п.) вы посоветуете для изучения трехмерной графики, физики и программирования такого рода игр?

Второй вопрос:
Где найти учебники/литературу по непосредственно устройству игр? По их программированию. Например, на форуме gamedev я вчера читал темы с обсуждением движка id Tech 4. И вроде есть много людей, которые сидят и вникают в код движка, при этом понимают, для чего та или иная функция предназначена, как организована общая архитектура и так далее. Откуда они это все знают? Откуда мне это узнать? Я чувствую себя полным лохом, потому что для меня это пока что совершенно непостижимо. Мне советовали анализировать движок Quake engine, но КАК? Я же НИЧЕГО не понимаю ни в нем, ни вообще в трехмерных играх... Например, я читал про Quake engine, я практически не понял принципы его работы. Я не понял, как работает затенение Гуро, я не понял, как, простите за выражение, "работает" основное уравнение рендеринга и как его реализовать, применить. Но я хочу понять, разобраться и научиться использовать это. Не знаю, получится ли по профессии заниматься игрописательством, но я хотел бы этим заниматься по профессии.

Что мне читать? Есть ли какие-то книги? Как понять/узнать, КАК работает компьютерная графика, если можно так вырзиться? Я думаю, вы поняли второй вопрос.

Извините за много букв и спасибо за внимание!
mmx358 вне форума Ответить с цитированием
Старый 24.07.2012, 22:54   #2
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Мне кажется, Вам нужны не книги или справочники, а некий список того, что Вам нужно знать. Для начала неплохо бы знать аналитическую геометрию, основы анализа и физики (хотя, думаю, к 3ему курсы Вы это должны знать). Потом, например, можно взяться за OpenGL, хотя бы для понимания принципов работы 3D графики (я бы посоветовал замечательные уроки от Nehe). Потом можно попробовать простейшую физику. На чем-нибудь простом и без графики попробовать сделать искусственного противника. И т.д. и т.п.

Главное - как можно больше практики. Не хватайтесь за все сразу, начинайте с разных сторон, пробуйте, экспериментируйте. Необходимые навыки и знания придут с опытом.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 25.07.2012, 01:36   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Не знаю, получится ли по профессии заниматься игрописательством, но я хотел бы этим заниматься по профессии.
Не получится. Во-всяком случае пока.
Нужно очень много изучить. Рэндеринг, не самое главное. Это всего-лишь проекция трёхмерного пространства на плоскость.
Сначала научитесь работать со спрайтами, потом с шейдерами. Потом изучите Open GL. Потом DirectX, а уж потом, лезьте в 3D графику.
Научитесь работать с преобразованиями костей (bones) - знания по-механике.
В общем - удачи.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 25.07.2012, 02:16   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Потом изучите Open GL. Потом DirectX
зачем обоих то?
достаточно одного.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.07.2012, 06:21   #5
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
зачем обоих то?
достаточно одного.
OpenGL проще в изучении. Хотя, DirectX 11, говорят, упростили донельзя.
Давно этим не занимался (изучал DirectX 7, показалось сложнее, чем OpenGL).
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 25.07.2012, 10:21   #6
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию

Цитата:
Сообщение от Smitt&Wesson
Не получится. Во-всяком случае пока.
Нужно очень много изучить. Рэндеринг, не самое главное. Это всего-лишь проекция трёхмерного пространства на плоскость.
Сначала научитесь работать со спрайтами, потом с шейдерами. Потом изучите Open GL. Потом DirectX, а уж потом, лезьте в 3D графику.
Научитесь работать с преобразованиями костей (bones) - знания по-механике.
В общем - удачи.
Я прекрасно понимаю, что сразу/в скором времени ничего не получится и что на освоение уйдет по-настоящему очень много времени. Не могли бы Вы немного поподробнее раскрыть эту последовательность:
Цитата:
Сначала научитесь работать со спрайтами, потом с шейдерами. Потом изучите Open GL. Потом DirectX, а уж потом, лезьте в 3D графику.
А также, я не совсем понял, что Вы хотели сказать этим:
Цитата:
Не получится. Во-всяком случае пока.
---------------------------------------------------------------------
Цитата:
Сообщение от Granus
Мне кажется, Вам нужны не книги или справочники, а некий список того, что Вам нужно знать. Для начала неплохо бы знать аналитическую геометрию, основы анализа и физики (хотя, думаю, к 3ему курсы Вы это должны знать). Потом, например, можно взяться за OpenGL, хотя бы для понимания принципов работы 3D графики (я бы посоветовал замечательные уроки от Nehe). Потом можно попробовать простейшую физику. На чем-нибудь простом и без графики попробовать сделать искусственного противника. И т.д. и т.п.

Главное - как можно больше практики. Не хватайтесь за все сразу, начинайте с разных сторон, пробуйте, экспериментируйте. Необходимые навыки и знания придут с опытом.
Спасибо за развернутый ответ! Я понял, что Вы имеете в виду, однако, мне кажется, что было бы неплохо иметь справочники/учебники по необходимым разделам математики ( в т.ч. геометрии), физики, т.к. далекооооо не все отложилось в голове, только немногое, ведь при неиспользовании оно как бы забывается, но при использовании - вспоминается, однако, вспомнить без дополнительных материалов мне лично представляется трудным.

Мне больше всего неясен переход (грань) между "теорией" - математикой, физикой - и непосредственно созданием игры. Я поэтому спросил про книги/учебники. Ведь просто так трехмерную графику не сделаешь, без определенных знаний и навыков, однако, когда эти знания и навыки есть, каким именно образом их использовать? Я не знаю, правильно ли я выразился... Ну, например, если взять того же Дж. Кармака, разве он все просто так придумал и написал? Ведь он использовал математику, физику, он как-то знал, как это использовать. Или же, другими словами и немного в другом смысле: он понимал, как, например, действует метод Гуро (думаю, и я пойму принцип, если еще раз внимательно прочитаю информацию про него) и знал, как можно научить этому методу компьютер и как связать этот метод с остальными "фишками" в движке.

Так как он был "первопроходцем", то мое дело - изучать уже то, что сделали другие, т.е. перенимать уже имеющийся опыт, дабы не изобретать велосипед заново (однако, заново проектировать и строить велосипед, как я понял, полезно).

Но как узнать, что лежит в основе различных методов, как объяснить то, что непосредственно пишется в программе, с помощью математики/физики, дабы было понимание и возможность свободного применения этих методов/технологий.
mmx358 вне форума Ответить с цитированием
Старый 25.07.2012, 15:20   #7
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от mmx358 Посмотреть сообщение
Но как узнать, что лежит в основе различных методов, как объяснить то, что непосредственно пишется в программе, с помощью математики/физики, дабы было понимание и возможность свободного применения этих методов/технологий.
Есть такая наука - Кибернетика. На первом курсе в специализированном ВУЗ'е понятие кибернетики дается в развернутом виде, т.е. это наука о представлении какого либо физического явления в виде математической модели, также с последующим изучением взаимодействия этой модели с некой взятой средой, на основе анализа изменения состояния отдельных параметров модели. Иными словами, кибернетика дает базовые знания как представить физическое явление в виде математической модели с достаточной детализацией с необходимым набором параметров.

Любое явление в окружающем нас мире можно представить в виде черного ящика с множеством входов и выходов. Внутри ящика пока еще неизвестная функция, на вход подаются данные из среды наблюдения, на выходе - параметры состояния модели. Чтобы видеть модель и мочь ее применить в игре, нужно собрать основные параметры моделируемого объекта/процесса и проанализировать их изменение. Например, человек идет по улице. Он - черный ящик. Входы - параметры среды: гравитация, препятствия, сопротивление воздуха (ветер) и пр. Выходы - изменение положения в пространстве: скорость, ускорение, дистанция, время. Теперь становится понятно, что должно быть функцией этого черного ящика, ...это уравнение с несколькими коэффициентами возвращающее положение объекта в пространстве, т.е. дискретно во времени сбор параметров положения, вычисление следующей точки перемещения на основе ускорения, скорости, сопротивления воздуха, препятствий и пр. В примитивном виде оно так выглядит.

Чтобы научиться делать игры, нужно научиться анализировать явления и знать какие простейшие модели существуют. Вспоминаем баллистику. Мы только хотим чтобы ядро из пушки полетело как нужно, а между тем в физике в школьном курсе уже есть искомая целевая функция, нужно только вспомнить/посмотреть и применить. Книга по программированию игр даст только возможные распространенные понятия о библиотеках и их возможностях, сами же модели нужно создавать самостоятельно. Если вы не видите математическую модель в объекте сразу, то бесполезно что-то читать, запоминать, поскольку шаг в сторону и вы уже не способны решить поставленную задачу. Потому совет: начинайте с анализа явлений, собирайте данные, описывайте взаимодействия. Это статистика, динамика, а загрузка данных и рендер - вещи последние.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.07.2012, 15:44   #8
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию

Beermonza, спасибо большое за подробный ответ! Это выглядит не так пугающе неизвестно. Вопрос также и в том, как математическая модель преобразуется в программную форму для использования в вычислительной технике.

Часть моего вопроса до сих пор осталась без ответа: какой литературе можно довериться? Я пару недель назад скачал довольно много книг по программированию игр, трехмерной графике, математике и физике, однако, какие книги лучше/хуже? Может, Вы или другие участники форума могли бы посоветовать мне несколько наилучших вариантов?
mmx358 вне форума Ответить с цитированием
Старый 26.07.2012, 19:02   #9
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Самый лучший путь - тернист. Вам нужны книги по описанию базовых функций и библиотек, я не могу назвать точно книгу, поскольку ими не пользуюсь (читаю мануал к библиотеке/движку), а что мне от туда может понадобиться понимаю и так, исходя из того что возвращает та или иная функция.

Школьный курс физики, школьный курс математики, школьный курс геометрии, ...и иже с ними аналогичные дисциплины в ВУЗ'ax. Получается, что все знания нам уже дали, вот только восприняли мы их или нет - это уже другой вопрос.

Программирование сводится к пониманию базовых механизмов и созданию математической модели явления/процесса. Тут сверхъестественного ничего нет. Нужно четко понимать чего ты хочешь. Как инициализировать, обработать и вывести изображения вы найдете в любой книге, а вот как выстроить тот самый динамический скелет проекта (будем это так называть) вам не напишут, ...только распространенные массовые случаи. Сами понимаете, ничего хорошего в этом нет, просто плодятся сборщики игр, для которых коммерческая сторона приоритетна. Да они и не программируют ничего, только пользуются движками, вставляют ресурсы, т.е. на всем готовом, ...от того и игры похожи друг на друга как две капли воды.

Начните с самого начала, т.е. с основ выбранного языка, ...по порядку: переменные, типы, классы, объекты, записи, текст и пр. Многие считают, что это не нужно, и зря! ...программист, занимавшийся созданием софта, переходит в категорию игроделов на раз, поскольку владеет более абстрактным мышлением, он видит древовидные структуры модели сразу, поскольку раздел Базы Данных не пролетает мимо без последствий, естественно, положительных. Так же, написание в прошлом мультимедийных и графических приложений на простейших инструментах дает более глубокое понимание того с чем имеешь дело, как оно работает под "обверткой" библиотеки.

Начав сразу с игр, вы рискуете моментально запутаться. Создание игр - это высшая ступень программирования, ...разумеется, если проект серьезный, а раздел вбирает в себя все направления моделирования/программирования.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.07.2012, 21:36   #10
mmx358
Пользователь
 
Регистрация: 28.06.2009
Сообщений: 84
По умолчанию

Beermonza, большущее Вам спасибо! Постараюсь применить сказанное Вами на деле.
mmx358 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Народ не получается с задачей в c++! Ни как не получается даже начать! дайте решение,хотя бы набросайте чего нибудь! sonat Помощь студентам 2 30.05.2012 08:27
Программирование. С чего начать и как :o Sage Свободное общение 21 20.01.2009 00:41
незнаю с чего начать... а начать очень нужно ОСЯНЯ Помощь студентам 2 26.11.2008 20:08
Как и с чего начать при создании 2д игрушки. fis Gamedev - cоздание игр: Unity, OpenGL, DirectX 17 14.05.2007 18:14