superregistr Опубликовано 6 декабря, 2010 Жалоба Опубликовано 6 декабря, 2010 Разработка графического движка Spherrra, ожидается, будет состоять из двух этапов: Этап 1 1) создание сферы из динамических тайлов с уровнями детализации 2) позиционирование юнита на сфере 3) перемещение юнита в любом направлении 4) нахождение соседних юнитов с помощью радиусов видимости, а так же радиусы действия и радиусы расположения Этап 2 1) создание ландшафтов: физическая карта 2) создание текстурного LOD 3) создание ландшафтов (продолжение): климатическая карта, природная карта 3) создание рек и озер 4) создание лесов 5) создание визуальной карты 6) генератор карты Средства разработки: C++/OpenGL/Qt No comments
superregistr Опубликовано 6 декабря, 2010 Автор Жалоба Опубликовано 6 декабря, 2010 Этап 1 1) создание сферы из динамических тайлов с уровнями детализации Этап 1, пункт 1 в свою очередь состоит из создания функций и алгоритмов. Сфера получается итерационным делением икосаэдра. Каждый треугольник или вершина на сфере имеют следующие координаты (номер слоя, номер в слое). Используя эти координаты можно получить порядковый номер треугольника или вершины. Треугольники и вершины закручиваются на сфере по правилу правого винта с севера на юг. Предполагается написание следующих функций: * координата треугольника дает координаты 4 новых треугольников при делении * координата треугольника дает координаты 3 своих вершин * координата вершины дает координаты 6-5 своих треугольников * (?) координата вершины дает свои сферические координаты в двух углах: тета и фи No comments
VasIsDas1 Опубликовано 9 декабря, 2010 Жалоба Опубликовано 9 декабря, 2010 Движок допилил уже? Чем анимацию делать будешь? На чем оснуешь ИИ? Насчет создания рек и озер. Это что- то вроде алгоритма,который я тебе на геймдеве предлагал, Или все уложится в зарисовывание очертаний рек в редакторе? Если добавить мой алгоритм, то рекки будут вести сябя так же как в реальности, т. е. менять русло. Ведь развитие цивилизаций редко укладывается в промежуток меньше 5 тыс. лет. Любая река за это время может даже начать впадать в другое море.
superregistr Опубликовано 9 декабря, 2010 Автор Жалоба Опубликовано 9 декабря, 2010 Движок допилил уже? Разработал функцию: * координата треугольника дает координаты 4 новых треугольников при делении Сейчас делаю: * координата треугольника дает координаты 3 своих вершин Но пока большее затруднение вызывает вот это: (?) координата вершины дает свои сферические координаты в двух углах: тета и фи Чем анимацию делать будешь? Не знаю, что посоветуешь? На чем оснуешь ИИ? Есть идея создание иерархического AI, каждый бот решает сугубо свою задачу и передает решение выше, самый высокий бот принимает окончательное решение. Не знаю, насколько это выполнимо. Насчет создания рек и озер. Это что- то вроде алгоритма,который я тебе на геймдеве предлагал, Или все уложится в зарисовывание очертаний рек в редакторе? Если добавить мой алгоритм, то рекки будут вести сябя так же как в реальности, т. е. менять русло. Ведь развитие цивилизаций редко укладывается в промежуток меньше 5 тыс. лет. Любая река за это время может даже начать впадать в другое море. Хотелось бы для начала создать простую модель, но так, чтобы ее можно было модернизировать в последствии. No comments
superregistr Опубликовано 9 декабря, 2010 Автор Жалоба Опубликовано 9 декабря, 2010 Ведь развитие цивилизаций редко укладывается в промежуток меньше 5 тыс. лет.Любая река за это время может даже начать впадать в другое море. Как мне видится, река математически будет представлять набор вершин. Чтобы можно было изменять русло, вершины нужно хранить не в векторе (QVector), а в списке (QList). No comments
superregistr Опубликовано 9 декабря, 2010 Автор Жалоба Опубликовано 9 декабря, 2010 Разработал функцию: * координата треугольника дает координаты 4 новых треугольников при делении Вот исходный код: функция get4Triangles() в качестве аргумента берет номер слоя и номер в слое и возвращает через указатель номера слоев и в слоях новых 4-х треугольников. Функция нужна для LOD. No comments
soflot Опубликовано 9 декабря, 2010 Жалоба Опубликовано 9 декабря, 2010 У тебя ведь должен быть какой-то "нижний", самый мелкий уровень, на котором задаются физические характеристики тайлов (степь\горы\вода, например). Именно на этом уровне всё и будет работать, а остальное - это так, для "красоты", чтобы полетать над планетой
superregistr Опубликовано 10 декабря, 2010 Автор Жалоба Опубликовано 10 декабря, 2010 У тебя ведь должен быть какой-то "нижний", самый мелкий уровень, на котором задаются физические характеристики тайлов (степь\горы\вода, например). Именно на этом уровне всё и будет работать, а остальное - это так, для "красоты", чтобы полетать над планетой Немного тебя подправлю - самый высокий уровень детализации Остальные уровни нужны не только, чтобы полетать над планетой. Планета всегда строится из икосаэдра делением. Например, вы совершили поворот планеты на самом высоком уровне детализации, но тогда необходимо знать, какие тайлы видны на экране, а какие нет. И вот начинается деление икосаэдра - выбираются видные на экране его тайлы, они делятся, потом выбираются видные из них, потом они делятся и т.д., пока не будет достигнут нужный уровень детализации. Т.е. любое изменение камеры вызывает деление первоначального икосаэдра, а потом деление того, что получилось и т.д. Более того, крупные тайлы будут использоваться в нахождении радиусов юнита. Поправка: не в нахождении самого радиуса, а в нахождении того, что лежит в пределах этого радиуса. No comments
superregistr Опубликовано 10 декабря, 2010 Автор Жалоба Опубликовано 10 декабря, 2010 * координата треугольника дает координаты 3 своих вершин Написана функция get3Vertices(), ее аргументом является координата (номер слоя, номер в слое) треугольника, через указатель она возвращает координаты (номера слоя, номера в слое) 3-х своих вершин. No comments
soflot Опубликовано 14 декабря, 2010 Жалоба Опубликовано 14 декабря, 2010 Тебе нужна помощь по графическому движку, или ты пока сам справляешься?
superregistr Опубликовано 15 декабря, 2010 Автор Жалоба Опубликовано 15 декабря, 2010 Тебе нужна помощь по графическому движку, или ты пока сам справляешься? От помощи не отказываюсь) Пишу вот эту функцию: * координата вершины дает координаты 6-5 своих треугольников Так же придумал как по коодинате вершины (номер слоя, номер в слое) вычислить реальную декартову или сферическую координату вершины. Но увы нездоровится( Можешь освоить технологию снятие и наложение текстуры в OpenGL? Или разобраться как устроены файлы .3ds и .blender, чтобы сделать загрузчик моделей? Или же придумать алгоритм как юнит будет понимать, что он вышел за пределы треугольника? No comments
superregistr Опубликовано 15 декабря, 2010 Автор Жалоба Опубликовано 15 декабря, 2010 * координата вершины дает координаты 6-5 своих треугольников Написана функция get6Triangles(), ее аргумент координата вершины, через указатель она возвращает 6 координат треугольников. Критерий отличия 6 треугольников от 5 - последняя координата равна предпоследней. No comments
superregistr Опубликовано 3 января, 2011 Автор Жалоба Опубликовано 3 января, 2011 Описание функций: st - номер слоя для треугольника jt - номер в слое для треугольника sv - номер слоя для вершины jv - номер в слое для вершины void get4Triangles(int st, int jt, int *st0, int *jt0, int *st1, int *jt1, int *st2, int *jt2, int *st3, int *jt3) Определяет 4 новых треугольника при разбивке старого треугольника: st, jt - координаты старого треугольника; *st0, *jt0, *st1, *jt1, *st2, *jt2, *st3, *jt3 - координаты новых треугольников. void get3Vertices(int st, int jt, int *sv0, int *jv0, int *sv1, int *jv1, int *sv2, int *jv2) Определяет 3 вершины треугольника: st, jt - координаты треугольника; *sv0, *jv0, *sv1, *jv1, *sv2, *jv2 - координаты вершин треугольника. void get6Triangles(int sv, int jv, int *st0, int *jt0, int *st1, int *jt1, int *st2, int *jt2, int *st3, int *jt3, int *st4, int *jt4, int *st5, int *jt5) Определяет 6-5 треугольников вершины. Если 6-ого треугольника не существует, то 6-ой треугольник равен 5-ому -- это критерий отличия шестиугольника от пятиугольника. Треугольники закручиваются последовательно по правилу правого винта. Чтобы рассчитать сферические координаты вершины есть два подхода: 1) итерационная разбивка - все стороны треугольника делятся пополам, потом вершины выносятся на сферу, операция повторяется 2) неитерационная разбивка - любая разбивка производится функционально на 20 треугольниках икосаэдра, далее вершины выносятся на сферу. 1-ый способ дает более красивую сферу, но чтобы его использовать необходимо итерационные разбивки сохранять в файл и потом грузить из файла: например при 8-ой разбивке сферические углы занимают уже(!) 5 МБ и увеличиваются каждый раз в 4 раза. 2-ой способ дает менее красивую сферу, но любые сферические координаты можно рассчитать динамически. Думаю, какой из способов лучше. No comments
superregistr Опубликовано 24 февраля, 2011 Автор Жалоба Опубликовано 24 февраля, 2011 Доделал свой механизм. С динамическими тайлами и уровнями детализации. Определение виден ли треугольник на экране или нет оставляет желать лучшего. Возможно, лучше переделать этот момент через буфер выбора или еще какой-нибудь буфер. Надо подумать. 2) позиционирование юнита на сфере 3) перемещение юнита в любом направлении Приняты дискретные положения и перемещение по узлам. No comments
superregistr Опубликовано 28 декабря, 2017 Автор Жалоба Опубликовано 28 декабря, 2017 После нескольких лет молчания, хочу сообщить, что проект не закрыт, а делается понемногу. За это время пришло новое переосмысление, что и как нужно сделать. В качестве единицы поверхности выбрал шестиугольники, как интуитивно понятные человеку. Почти полностью переписал все алгоритмы. Теперь сфера вычисляется не итерационно, а с помощью поворотов. Выглядит так. Разбивки: 4, 5, 10, 20, 30, 40, 50 Разбивка 100 тоже шустро работает, но файл сюда не влез. No comments
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти