krre |
Отправлено: 29 Мая, 2016 - 12:40:05 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Сейчас разрабатываю то, что называется Main Loop - двигатель всей игры, благодаря которому внутри неё всё может шевелиться, и решил замутить вот какую штуку. Пусть время в игре будет синхронизировано с нашим временем. То есть сколько времени прошло у нас, столько у там. Выйдя из игры сегодня и вернувшись через неделю, мы вдруг обнаружим, что там тоже прошла неделя, в течение которой наш Гагарин стоял или лежал без движения. Если за это время его деревом завалит, или он потонет в наводнении, то мы сами виноваты, надо было перед выходом оставлять его в безопасном месте.
Это добавляет больше реалистичности, но и больше неудобств тоже. Так можно дойти до того, что сутки на некоторых планетах будут равняться нашим суткам, если планеты такого же размера, как Земля, и крутятся с такой же скоростью. Неудобство здесь в том, что если приземлился на планету ночью, а играешь в игру всегда в одно и то же земное время (скажем, вечером после работы), то так и будешь попадать там на ночь и лазить постоянно в потёмках. Конечно, у Гагарина будет встроенный фонарь (с большим расходом энергии) и инфра-красное зрение (с меньшим энергопотреблением), но рано или поздно все батареи сядут, и тогда конец. Если не успеешь к тому времени оборудовать себе какой-то кустарный источник электроэнергии для подзарядки.
Положительная сторона всего этого в том, что решать эти проблемы придётся нескоро, впереди еще несколько месяцев разработки, и к тому времени я могу сто раз всё передумать. Главное пока то, что раз время в игре и в нашей жизни синхронизировано, то дальше весь программный код и вся архитектура будут отталкиваться именно от этого. |
|
|
krre |
Отправлено: 31 Мая, 2016 - 20:25:41 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Закончил с Game Loop (его иногда и так называют) и перешёл к следующему этапу. Этапов впереди будет порядка нескольких миллионов, если кто ещё не понял. Это ж трёхмерная игра, однако, причём, на собственном движке, а там всё очень непросто.
Короче, следующий этап - это разработка системы событий. События - это когда где-то что-то произошло, и другие системы игры хотят знать это и соответствующим образом отреагировать. Например, умер какой-нибудь NPC - высылается событие "умер NPC с таким-то кодом". Событие получает каждый житель деревни и понимает, что надо собираться на похороны. Через некоторое время организовывается похоронная процессия и марширует через всю деревню. Таким образом, система событий - важная и нужная штука, а самих событий может быть сотни или даже тысячи. Но, надеюсь, что у меня до такого количества не дойдёт.
И ещё кое-что. Я обещал, что буду по сто раз всё передумываеть? Хорошо, вот моё первое передумывание. Я решил не привязывать время в игре к реальному времени. А то получится слишком экстремально. Так в самый напряжённый момент даже не отвлечёшься, чтобы в туалет сходить или ответить на телефонный звонок. Наверное, это будет очень раздражать. Словом, теперь всё снова будет, как у всех. Пока играешь, время в игре идёт, а поставил на паузу или вышел из игры - время остановилось. До тех пор, пока не вернёшься обратно. |
|
|
krre |
Отправлено: 01 Июня, 2016 - 19:45:52 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
С системой событий разобрался, начала работать. Получилось даже проще, чем я ожидал. Благодаря тому, что не сам всё придумал, а спионерил готовое решение в интернете.
Едем дальше. Теперь попытаюсь нарисовать что-нибудь на экране. Например, плоскость, по которой будет ходить Гагарин. Позже эта плоскость преобразуется в ландшафт. В общем, это надолго. Поскольку я не использую готовых рисовальных библиотек, то придётся делать всё на голом OpenGL. Кто не знает, что такое OpenGL, тому лучше этого и не знать.
Это как ассемблер, только для графики. Всё, что умеет OpenGL, - это рисовать линии и треугольники, зато чертовски быстро, миллионы штук в секунду. В нём даже камеры нет - самому нужно создавать. Но даже чтобы нарисовать простейший треугольник, надо написать программного кода на три страницы. Чтобы этот треугольник повернуть, надо перемножить кучу матриц 4x4. А когда дело доходит до освещения и теней, то вообще закопаться можно. Ничего этого в готовом виде в OpenGL, понятное дело, тоже нет. Все делается шейдерами и хитрыми запутанными инструкциями. Короче, полезная штука для разминания мозгов, чтоб не заплесневели. |
|
|
krre |
Отправлено: 03 Июня, 2016 - 12:53:28 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Gagarin Daily News
Если кто ещё не понял, Gagarin Daily News - это такая рубрика в нашей газете, когда рассказать особо не о чем, то есть никаких новых законченных дел нету, а написать что-то надо (или просто хочется). Вот тогда берётся и пишется, что вообще происходит.
А что происходит? Помнится, я задался целью нарисовать плоскость. Дело это непростое и движется постепенно. Сейчас у меня есть объект класса Plane, он помещён в сцену, сцена помещена во вьюпорт, а вьюпорт помещён в приложение. Система пытается этот Plane рисовать, но сейчас этот процесс выполняется в холостую, потому что нет ещё ни геометрии, ни шейдеров, ни материала, а есть только метод draw(). Вот он и запускается 60 раз в секунду. |
|
|
krre |
Отправлено: 05 Июня, 2016 - 10:25:44 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
После долгой изнурительной борьбы с OpenGL удалось нарисовать квадрат. Это даже не совсем квадрат, а точка размером 200 пикселей. Просто OpenGL не работает с круглыми формами, для него существуют только линии. Если надо изобразить круглую форму, тогда нарезаем её маленькими отрезками до тех пор, пока отрезачность не перестанет быть заметной. Так вся графика на компах и делается, из мелконарезанных линий и треугольников. Правда, можно ещё нарисовать круг шейдером, чисто из пикселей, но этот круг будет кругом только в плоскости экрана, его уже не развернёшь в перспективе, чтобы под углом он был похож на эллипс.
Дальше надо нарисовать настоящий квадрат из двух плотно сцепленных по гипотенузе треугольников, а потом умножить этот квадрат на перспективную матрицу, чтобы увидеть его уходящим в глубину. Это снова на несколько дней работы. Как всегда, жизнь коротка, а дел много. |
|
|
krre |
Отправлено: 08 Июня, 2016 - 19:44:17 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Пришёл с работы домой и тут же сварганил плоскость в цвете. Вы легко можете определить по скриншотам, на работе они были сделаны или дома. Если кнопки управления окном слева, они кругленькие и оранжеватенькие, значит, это Ubuntu, и я был на работе. А если страшненькое, бледненькое, квадратненькое, и кнопки справа, значит это домашний Windows.
Цвета вершин нарочно выбраны яркими и разными, чтобы подчеркнуть, что плоскость состоит из двух треугольных полигонов по три вершины - итого шесть вершин, и у каждой надо задать цвет. Обычно вершины задают более-менее однообразными цветами, и тогда треугольники становятся не видны. А ещё чаще просто накладывают текстуру с уже готовыми цветами, и там что попадёт, то попадёт. Градиентную интерполяцию между цветами видеокарта делает сама. Если бы это делалось на процессоре, это было бы очень долго, а на видеокарте это быстро. |
|
|
krre |
Отправлено: 10 Июня, 2016 - 11:18:54 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Gagarin Daily News
Идеи на будущее. Идеи - это то, что у меня сейчас получается лучше всего.
Действие будет происходить в "далёкой далёкой галактике". Гагарина туда забросят один раз, и дальше делай с галактикой что хочешь, она вся твоя. Помощи ему в случае чего ждать будет неоткуда, поэтому он будет бессмертный, то есть в случае серьёзного урона Game Over ему не грозит. Он будет только терять сознание до самовосстановления. Чтобы, пользуясь этим бессмертием, не возникло соблазна кидать Гагарина почём зря в огонь и медные трубы, процесс самовосстановления будет ущербным. Например, не всё будет восстанавливаться сразу, а период отключки может быть длительным. И за это время его могут куда-нибудь утащить всякие клептоманские аборигены, что может быть не всегда желательным. |
|
|
krre |
Отправлено: 11 Июня, 2016 - 19:29:22 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Гагарин теперь может перемещаться в пространстве. И не только ходить, а даже летать. Как орёл. Чтобы только ходить и не летать пока не выйдет. Для этого у него должен быть вес, на которую действует сила тяжести. Всё это требует подключения физического движка, что, конечно, ещё очень и очень рано. А без этого движка Гагарина невозможно пришпилить к плоскости, разве что какими-нибудь костылями, проверяющими вертикальные координаты тела по отношению к ней.
Сейчас я расскажу вам шокирующую вещь. В одной серии "Футурамы" говорилось (сам не смотрел, но слышал) о том, что двигатель не перемещает космический корабль. Сам корабль остаётся на месте, а двигатель перемещает Вселенную относительно него. Звучит смешно, но касательно трёхмерной графики это чистая правда. Когда мы добавляем камеру в сцену, чтобы показать мир, то мы не двигаем там камеру, она всегда находится в центре координат, а двигается сам мир. Точнее, поворот и перемещение камеры создаёт матрицу вида, а потом все вершины мира умножаются на эту матрицу. Ну, не совсем все, вообще-то, а только те, которые видны из камеры. Так вот, Гагарин - это обычная камера, и когда он "идёт" вперёд, то приближает к себе мир, а когда "идёт" назад - отдаляет.
Что ж, можно сказать, что игра почти закончена. Осталось добавить ещё что-нибудь, кроме Гагарина - и можно выпускать игру на консолях, десктопах и мобильных девайсах. |
|
|
krre |
Отправлено: 20 Июня, 2016 - 12:54:36 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Gagarin Daily News
Всю неделю я сражался против ECS, а ECS сражался против меня. В итоге ECS победил.
ECS - это Entity Component System, такая хитрая архитектура в играх, основанная на компонентной модели, на которую сейчас переходят всё больше и больше новых игр. В противовес традиционной объектно-ориентированной, основанной на наследовании. Это настолько необычная и непривычная архитектура, что мне понадобилась неделя, чтобы в ней как следует разобраться. Чтобы перечитать кучу статей, сообщений на форумах, программного кода и решить, что было бы неплохо и свою игру построить на этой архитектуре. Правда, опять же, существует 100500 подходов, как это сделать, и я ещё не совсем хорошо сориентировался, какой будет лучше конкретно для меня. В программировании всё меняется очень быстро, и приходится постоянно быть начеку, чтобы не отстать от прогресса. |
|
|
|