www.G-2B.com » участники форума » флуд » Gagarin

Страниц (12): В начало « ... 4 5 6 7 8 9 [10] 11 12 »
 

181. krre - 04 Сентября, 2016 - 13:37:23 - перейти к сообщению
Поскольку выяснилось, что у тестеров далеко не всё гладко с OpenGL, то пришлось отказаться от более новых способов обмена данным с GPU в пользу более старых, которые гарантированно должны работать у всех. Старый способ - это представить данные в виде одномерной текстуры, а по-научному - загнать в текстурный буфер. Долго пришлось разбираться с этим буфером и бороться с чёрным экраном, но в результате оно заработало.

Если вы никогда не видели, как выглядят данные в виде текстуры, то сейчас у вас появится счастливая возможность. Текстура в привычном нам понимании - это двухмерная картинка, в которой закодирован цвет пачками по четыре байта для каждого из RGBA каналов. Если мы оставим только первую строчку этой картинки и вместо цвета закодируем туда какие-то свои данные, то получится одномерный текстурный буфер. Вот так, например, выглядит в цвете массив матриц трансформации разрежённых воксельных октодеревьев.
182. krre - 04 Сентября, 2016 - 17:03:22 - перейти к сообщению
Ну, вот, у меня наконец-то отобразились несколько кубов. Улыбка И при этом fps стабильно держится на 60. Но так этот fps всех уже реально достал, то я его на скриншоте не показываю.

Пока что эти три куба рисуются не слишком правильно. Шейдер никак не сортирует их по глубине, в результате чего получается интересный такой сюрр при движении камеры. В текущем её положении красный куб по координатам дальше всех, синий посередине, и он наполовину внутри коричневого куба, который, в свою очередь ближе всех к камере. Но получается так, что когда я обхожу вокруг кубов, красный всегда вылезает на передний план. Смотрится очень смешно, поскольку мозг ожидает, что кубы будут перекрывать друг друга по глубине, а они перекрываются в том порядке, в каком были добавлены в сцену. гы-гы!

Отремонтировать глубину с ходу не получится, это крайне сложная штука в виду особенностей воксельных октодеревьев. Придётся поломать голову.
183. krre - 05 Сентября, 2016 - 12:27:49 - перейти к сообщению
Глубина пофиксена, и теперь кубы друг относительно друга рисуются правильно.

Следующий этап - сделать из кубов разрежённые воксельные октодеревья. То, ради чего всё и затевалось. Чтобы можно было превращать кубы в любые модели. Это самое страшное, там такая адская кухня, что ковыряния мне грозит не менее, чем на месяц. Но когда закончу, можно будет считать, что основная работа по графическому движку сделана, и тогда можно смело браться за саму игру.

Короче, ушёл, вернусь не скоро. гы-гы!
184. krre - 08 Сентября, 2016 - 08:47:23 - перейти к сообщению
Gagarin Daily News

Пока холодными осенними днями я вгрызаюсь в тёмную антиматерию октодеревьев, параллельно тем временем добавил в сцену свободную камеру. Теперь в сцене две камеры: одна жёстко сидит на Гагарине, а другая - свободная, нужна, чтобы рассматривать сцену со стороны. Доступна эта камера, конечно, только в девелоперском режиме. Клавиша 0 на цифровой панели циклически переключает обе камеры.
185. Коля Логан - 08 Сентября, 2016 - 19:45:40 - перейти к сообщению
krre:
Пока холодными осенними днями я вгрызаюсь в тёмную антиматерию октодеревьев, параллельно тем временем добавил в сцену свободную камеру. Теперь в сцене две камеры: одна жёстко сидит на Гагарине, а другая - свободная, нужна, чтобы рассматривать сцену со стороны. Доступна эта камера, конечно, только в девелоперском режиме. Клавиша 0 на цифровой панели циклически переключает обе камеры.

Если вторая камера не будет использована в игре напрямую, можно сделать дополнительной фичей, как в "Spider-Man: The Movie", где можно включить режим от первого лица. Отлично! Ещё оно явно пригодится для катсцен и трейлеров.
186. krre - 08 Сентября, 2016 - 19:48:15 - перейти к сообщению
Ещё можно сделать муху, прицепить к ней камеру и натравить муху на Гагарина. Да много чего можно придумать с дополнительными камерами. Улыбка
187. Коля Логан - 08 Сентября, 2016 - 19:50:57 - перейти к сообщению
krre:
Ещё можно сделать муху, прицепить к ней камеру и натравить муху на Гагарина. Да много чего можно придумать с дополнительными камерами.

Напомнило великолепную сентенцию из аннотации игры "Worms 3D" на русском языке: "Вид от лица снаряда". Обхохочешься!
188. krre - 12 Сентября, 2016 - 15:10:52 - перейти к сообщению
Gagarin Daily News

Мало-мальски разобрался в теории рейкастового рендеринга разрежённого воксельного октодерева. Начал робко и нерешительно писать шейдер.
189. 2B - 14 Сентября, 2016 - 09:23:05 - перейти к сообщению
О, я слышал такое слово - шейдер! Ура! Улыбка
190. krre - 18 Сентября, 2016 - 11:22:15 - перейти к сообщению
Новый рейкастовый алгоритм начинает мало-помалу работать, но в режиме сюрреализма. Куб снова изувечен. Очертания у него кубические, а внутренности сферические. Сферический куб в вакууме. В общем, страх и ужас. Всё это делается для того, чтобы из куба можно было слепить любой формы объект. Отрендерить куб легко, а вот превратить его в дерево или гору потруднее будет.

Продолжаю вгрызаться в тёмную антиматерию октодеревьев. Скоро уже академиком из-за них стану.
191. 2B - 20 Сентября, 2016 - 08:29:55 - перейти к сообщению
Может, тебе и сделать сюрреалистическую вселенную? Подмигну-ка
192. krre - 20 Сентября, 2016 - 08:38:52 - перейти к сообщению
Можно, но вот где взять ЛСД, чтобы войти в нужное "состояние" во время программирования? Улыбка
193. krre - 20 Сентября, 2016 - 10:26:57 - перейти к сообщению
Gagarin Daily News

Сделал специальный настроечный файл main.debug и положил его в корневую папку вместе с gagarin.exe. Этот файл загружается в девелоперском режиме и автоматически настраивает игру при её старте на нужное для отладки состояние. Например, загрузить такой-то сейв, поставить Гагарина в такую-то позицию, включить свободную камеру и где-то её разместить. Это позволит при запуске игры сразу же оказаться в проблемном для отладки месте. Сейчас в main.debug только одна настройка, enable=true, и она ничего не делает.

Между тем, битва с октодеревьями продолжается. Врагу не сдаётся наш гордый варяг. По-прежнему не удаётся заставить октодерево правильно нарисоваться. Придётся, как говорил один известный классик, "мочить их в сортире".
194. krre - 20 Сентября, 2016 - 14:12:09 - перейти к сообщению
Свершилось чудо! Друг спас жизнь друга!

Угроза замочить октодеревья в сортире подействовала. Оно заработало. Октодерево состоит из восьми листьев (поэтому и называется окто), я из него один лист откусил, и оно показало его откусанным. Всё, как и должно быть.

Но это, конечно, только начало. Ещё пахать и пахать. Теперь надо продолжить подразбиение, взять какой-нибудь из оставшихся семи листов и раздробить ещё мельче. Когда октодерево можно будет нормально и безболезненно дробить до любого уровня, тогда полдела будет сделано. После этого нужно ещё добиться, чтоб у каждого листа был свой индивидуальный цвет, по типу кубика рубика.
195. krre - 21 Сентября, 2016 - 08:21:57 - перейти к сообщению
Вожусь с рекурсивым подразбиением октодерева, и вот какой смешной баг получился. Октодерево должно было подразбиться два раза, а оно сделало это хреналлион раз. Удивительно, но комп не взорвался, программа не вылетела, и даже 60 fps остались на месте. Слава инженерам! гы-гы!
196. krre - 21 Сентября, 2016 - 09:25:52 - перейти к сообщению
Пофиксил багу, как-то даже неожиданно быстро получилось. Есть ещё не до конца законченные дела с подразбиением, но в целом уже близок следующий этап - добавление цвета.

На скриншоте один лист из восьми верхнего уровня убран, а на втором уровне из соседнего листа убран такой же подразбитый лист. Ну, вы всё поняли, короче. гы-гы!
197. 2B - 22 Сентября, 2016 - 09:24:36 - перейти к сообщению
Недурно, коллега, очень недурно! Улыбка
198. krre - 22 Сентября, 2016 - 13:41:48 - перейти к сообщению
Ну, так, это ж бубль гум! гы-гы!
199. krre - 23 Сентября, 2016 - 16:03:13 - перейти к сообщению
Вот и цвета подоспели. Причём, они так хитро сделаны, что не обязательно указывать цвет для всех без исключения нод. Можно не указать, и тогда цвет возьмётся из родительской ноды более верхнего уровня.

Собственно, на этом базовая часть по графике сделана. Это был тяжёлый и трудный этап, но, конечно, таких впереди будет ещё много, так что мозгам моим покоя не предвидится. На очереди следующий сложный этап - придумать, как визуально эти октодеревья создавать и редактировать. Сейчас они выглядят следующим образом:

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);


Все эти цифры приходится в голове конвертировать в желаемый цвет и форму, а это очень медленно и трудоёмко. Надо придумать какой-то визуальный редактор. Согласитесь, проще выбрать цвет из палитры на глаз, чем представлять мысленно, какой у него код. Наверное, придётся для этого создавать целую отдельную программу.
200. krre - 24 Сентября, 2016 - 10:06:33 - перейти к сообщению
Начал делать редактор воксельных октодеревьев. Причём, это будет не только редактор, а ещё и генератор ландшафтов. Они же тоже из октодеревьев состоят. Если тестировать ландшафты сразу в игре, то после каждого изменения какого-то параметра придётся перезапускать игру, а в редакторе можно добавить какой-нибудь ползунок или кнопку, при нажатии на которую меняется какой-то параметр ландшафта, и пейзаж будет сразу перерисовываться тут же в окне. В общем, практически все большие трёхмерные игры имеют свой редактор (или даже несколько) для редактирования игрового контента. У меня, получается, тоже будет.

Называется программа OctreeFarm. Окно в ней разделено на две части. В левой части - панелька управления, в правой - трёхмерное отображение октодерева. Или наоборот, ещё не решил.

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®

[Script Execution time: 0.043]     [ Gzip Disabled ]