Описание: Игра про строительство |
Поиск в теме | Версия для печати |
krre |
Отправлено: 04 Сентября, 2016 - 13:37:23 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Поскольку выяснилось, что у тестеров далеко не всё гладко с OpenGL, то пришлось отказаться от более новых способов обмена данным с GPU в пользу более старых, которые гарантированно должны работать у всех. Старый способ - это представить данные в виде одномерной текстуры, а по-научному - загнать в текстурный буфер. Долго пришлось разбираться с этим буфером и бороться с чёрным экраном, но в результате оно заработало.
Если вы никогда не видели, как выглядят данные в виде текстуры, то сейчас у вас появится счастливая возможность. Текстура в привычном нам понимании - это двухмерная картинка, в которой закодирован цвет пачками по четыре байта для каждого из RGBA каналов. Если мы оставим только первую строчку этой картинки и вместо цвета закодируем туда какие-то свои данные, то получится одномерный текстурный буфер. Вот так, например, выглядит в цвете массив матриц трансформации разрежённых воксельных октодеревьев. |
|
|
krre |
Отправлено: 04 Сентября, 2016 - 17:03:22 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Ну, вот, у меня наконец-то отобразились несколько кубов. И при этом fps стабильно держится на 60. Но так этот fps всех уже реально достал, то я его на скриншоте не показываю.
Пока что эти три куба рисуются не слишком правильно. Шейдер никак не сортирует их по глубине, в результате чего получается интересный такой сюрр при движении камеры. В текущем её положении красный куб по координатам дальше всех, синий посередине, и он наполовину внутри коричневого куба, который, в свою очередь ближе всех к камере. Но получается так, что когда я обхожу вокруг кубов, красный всегда вылезает на передний план. Смотрится очень смешно, поскольку мозг ожидает, что кубы будут перекрывать друг друга по глубине, а они перекрываются в том порядке, в каком были добавлены в сцену.
Отремонтировать глубину с ходу не получится, это крайне сложная штука в виду особенностей воксельных октодеревьев. Придётся поломать голову. |
|
|
krre |
Отправлено: 05 Сентября, 2016 - 12:27:49 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Глубина пофиксена, и теперь кубы друг относительно друга рисуются правильно.
Следующий этап - сделать из кубов разрежённые воксельные октодеревья. То, ради чего всё и затевалось. Чтобы можно было превращать кубы в любые модели. Это самое страшное, там такая адская кухня, что ковыряния мне грозит не менее, чем на месяц. Но когда закончу, можно будет считать, что основная работа по графическому движку сделана, и тогда можно смело браться за саму игру.
Короче, ушёл, вернусь не скоро. |
|
|
Коля Логан |
Отправлено: 08 Сентября, 2016 - 19:45:40 ID
|
почетный участник
Сообщений всего: 4476
Дата рег-ции: Июль 2008
Откуда: Донецк, Украина
Репутация: 30
|
krre:Пока холодными осенними днями я вгрызаюсь в тёмную антиматерию октодеревьев, параллельно тем временем добавил в сцену свободную камеру. Теперь в сцене две камеры: одна жёстко сидит на Гагарине, а другая - свободная, нужна, чтобы рассматривать сцену со стороны. Доступна эта камера, конечно, только в девелоперском режиме. Клавиша 0 на цифровой панели циклически переключает обе камеры.
Если вторая камера не будет использована в игре напрямую, можно сделать дополнительной фичей, как в "Spider-Man: The Movie", где можно включить режим от первого лица. Ещё оно явно пригодится для катсцен и трейлеров. |
|
|
krre |
Отправлено: 20 Сентября, 2016 - 14:12:09 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Свершилось чудо! Друг спас жизнь друга!
Угроза замочить октодеревья в сортире подействовала. Оно заработало. Октодерево состоит из восьми листьев (поэтому и называется окто), я из него один лист откусил, и оно показало его откусанным. Всё, как и должно быть.
Но это, конечно, только начало. Ещё пахать и пахать. Теперь надо продолжить подразбиение, взять какой-нибудь из оставшихся семи листов и раздробить ещё мельче. Когда октодерево можно будет нормально и безболезненно дробить до любого уровня, тогда полдела будет сделано. После этого нужно ещё добиться, чтоб у каждого листа был свой индивидуальный цвет, по типу кубика рубика. |
|
|
krre |
Отправлено: 23 Сентября, 2016 - 16:03:13 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Вот и цвета подоспели. Причём, они так хитро сделаны, что не обязательно указывать цвет для всех без исключения нод. Можно не указать, и тогда цвет возьмётся из родительской ноды более верхнего уровня.
Собственно, на этом базовая часть по графике сделана. Это был тяжёлый и трудный этап, но, конечно, таких впереди будет ещё много, так что мозгам моим покоя не предвидится. На очереди следующий сложный этап - придумать, как визуально эти октодеревья создавать и редактировать. Сейчас они выглядят следующим образом:
CODE:auto data = std::make_shared<std::vector<uint32_t>>();
// Header
data->push_back(0x00000003); // => Block info
// Nodes
data->push_back(0x00027F08); // 0000 0000 0000 0010 | 0111 1111 | 0000 1000
data->push_back(0x0000BF00); // 0000 0000 0000 0000 | 1101 1111 | 0000 0000
// Block info
data->push_back(0x00000000);
// Attach data
data->push_back(0x0000027F); // 0000 0000 0000 0000 0000 0002 | 0111 1111
data->push_back(0x00000999); // 0000 0000 0000 0000 0000 1001 | 1001 1001
// Colors
data->push_back(0x044A00FF);
data->push_back(0xA30000FF);
data->push_back(0x13DAFFFF);
data->push_back(0x7E4681FF);
data->push_back(0xFF0011FF);
data->push_back(0x903472FF);
data->push_back(0xAD7D4DFF);
data->push_back(0x5A1681FF);
data->push_back(0x6B38ACFF);
data->push_back(0x5DD772FF);
data->push_back(0xC5651FFF);
Все эти цифры приходится в голове конвертировать в желаемый цвет и форму, а это очень медленно и трудоёмко. Надо придумать какой-то визуальный редактор. Согласитесь, проще выбрать цвет из палитры на глаз, чем представлять мысленно, какой у него код. Наверное, придётся для этого создавать целую отдельную программу. |
|
|
krre |
Отправлено: 24 Сентября, 2016 - 10:06:33 ID
|
компьютерный мультипликатор
Сообщений всего: 2151
Дата рег-ции: Дек. 2008
Репутация: 28
|
Начал делать редактор воксельных октодеревьев. Причём, это будет не только редактор, а ещё и генератор ландшафтов. Они же тоже из октодеревьев состоят. Если тестировать ландшафты сразу в игре, то после каждого изменения какого-то параметра придётся перезапускать игру, а в редакторе можно добавить какой-нибудь ползунок или кнопку, при нажатии на которую меняется какой-то параметр ландшафта, и пейзаж будет сразу перерисовываться тут же в окне. В общем, практически все большие трёхмерные игры имеют свой редактор (или даже несколько) для редактирования игрового контента. У меня, получается, тоже будет.
Называется программа OctreeFarm. Окно в ней разделено на две части. В левой части - панелька управления, в правой - трёхмерное отображение октодерева. Или наоборот, ещё не решил. |
|
|
|
Поиск в теме | Версия для печати |
Страниц (12): В начало « ... 4 5 6 7 8 9 [10] 11 12 » |
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0) |
« флуд » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|