superregistr Posted December 6, 2010 Report Share Posted December 6, 2010 Разработка графического движка Spherrra, ожидается, будет состоять из двух этапов: Этап 1 1) создание сферы из динамических тайлов с уровнями детализации 2) позиционирование юнита на сфере 3) перемещение юнита в любом направлении 4) нахождение соседних юнитов с помощью радиусов видимости, а так же радиусы действия и радиусы расположения Этап 2 1) создание ландшафтов: физическая карта 2) создание текстурного LOD 3) создание ландшафтов (продолжение): климатическая карта, природная карта 3) создание рек и озер 4) создание лесов 5) создание визуальной карты 6) генератор карты Средства разработки: C++/OpenGL/Qt No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/
superregistr Posted December 6, 2010 Author Report Share Posted December 6, 2010 Этап 1 1) создание сферы из динамических тайлов с уровнями детализации Этап 1, пункт 1 в свою очередь состоит из создания функций и алгоритмов. Сфера получается итерационным делением икосаэдра. Каждый треугольник или вершина на сфере имеют следующие координаты (номер слоя, номер в слое). Используя эти координаты можно получить порядковый номер треугольника или вершины. Треугольники и вершины закручиваются на сфере по правилу правого винта с севера на юг. Предполагается написание следующих функций: * координата треугольника дает координаты 4 новых треугольников при делении * координата треугольника дает координаты 3 своих вершин * координата вершины дает координаты 6-5 своих треугольников * (?) координата вершины дает свои сферические координаты в двух углах: тета и фи No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85685
VasIsDas1 Posted December 9, 2010 Report Share Posted December 9, 2010 Движок допилил уже? Чем анимацию делать будешь? На чем оснуешь ИИ? Насчет создания рек и озер. Это что- то вроде алгоритма,который я тебе на геймдеве предлагал, Или все уложится в зарисовывание очертаний рек в редакторе? Если добавить мой алгоритм, то рекки будут вести сябя так же как в реальности, т. е. менять русло. Ведь развитие цивилизаций редко укладывается в промежуток меньше 5 тыс. лет. Любая река за это время может даже начать впадать в другое море. Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85763
superregistr Posted December 9, 2010 Author Report Share Posted December 9, 2010 Движок допилил уже? Разработал функцию: * координата треугольника дает координаты 4 новых треугольников при делении Сейчас делаю: * координата треугольника дает координаты 3 своих вершин Но пока большее затруднение вызывает вот это: (?) координата вершины дает свои сферические координаты в двух углах: тета и фи Чем анимацию делать будешь? Не знаю, что посоветуешь? На чем оснуешь ИИ? Есть идея создание иерархического AI, каждый бот решает сугубо свою задачу и передает решение выше, самый высокий бот принимает окончательное решение. Не знаю, насколько это выполнимо. Насчет создания рек и озер. Это что- то вроде алгоритма,который я тебе на геймдеве предлагал, Или все уложится в зарисовывание очертаний рек в редакторе? Если добавить мой алгоритм, то рекки будут вести сябя так же как в реальности, т. е. менять русло. Ведь развитие цивилизаций редко укладывается в промежуток меньше 5 тыс. лет. Любая река за это время может даже начать впадать в другое море. Хотелось бы для начала создать простую модель, но так, чтобы ее можно было модернизировать в последствии. No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85765
superregistr Posted December 9, 2010 Author Report Share Posted December 9, 2010 Ведь развитие цивилизаций редко укладывается в промежуток меньше 5 тыс. лет.Любая река за это время может даже начать впадать в другое море. Как мне видится, река математически будет представлять набор вершин. Чтобы можно было изменять русло, вершины нужно хранить не в векторе (QVector), а в списке (QList). No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85766
superregistr Posted December 9, 2010 Author Report Share Posted December 9, 2010 Разработал функцию: * координата треугольника дает координаты 4 новых треугольников при делении Вот исходный код: функция get4Triangles() в качестве аргумента берет номер слоя и номер в слое и возвращает через указатель номера слоев и в слоях новых 4-х треугольников. Функция нужна для LOD. No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85789
soflot Posted December 9, 2010 Report Share Posted December 9, 2010 У тебя ведь должен быть какой-то "нижний", самый мелкий уровень, на котором задаются физические характеристики тайлов (степь\горы\вода, например). Именно на этом уровне всё и будет работать, а остальное - это так, для "красоты", чтобы полетать над планетой Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85820
superregistr Posted December 10, 2010 Author Report Share Posted December 10, 2010 У тебя ведь должен быть какой-то "нижний", самый мелкий уровень, на котором задаются физические характеристики тайлов (степь\горы\вода, например). Именно на этом уровне всё и будет работать, а остальное - это так, для "красоты", чтобы полетать над планетой Немного тебя подправлю - самый высокий уровень детализации Остальные уровни нужны не только, чтобы полетать над планетой. Планета всегда строится из икосаэдра делением. Например, вы совершили поворот планеты на самом высоком уровне детализации, но тогда необходимо знать, какие тайлы видны на экране, а какие нет. И вот начинается деление икосаэдра - выбираются видные на экране его тайлы, они делятся, потом выбираются видные из них, потом они делятся и т.д., пока не будет достигнут нужный уровень детализации. Т.е. любое изменение камеры вызывает деление первоначального икосаэдра, а потом деление того, что получилось и т.д. Более того, крупные тайлы будут использоваться в нахождении радиусов юнита. Поправка: не в нахождении самого радиуса, а в нахождении того, что лежит в пределах этого радиуса. No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85822
superregistr Posted December 10, 2010 Author Report Share Posted December 10, 2010 * координата треугольника дает координаты 3 своих вершин Написана функция get3Vertices(), ее аргументом является координата (номер слоя, номер в слое) треугольника, через указатель она возвращает координаты (номера слоя, номера в слое) 3-х своих вершин. No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85834
soflot Posted December 14, 2010 Report Share Posted December 14, 2010 Тебе нужна помощь по графическому движку, или ты пока сам справляешься? Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85980
superregistr Posted December 15, 2010 Author Report Share Posted December 15, 2010 Тебе нужна помощь по графическому движку, или ты пока сам справляешься? От помощи не отказываюсь) Пишу вот эту функцию: * координата вершины дает координаты 6-5 своих треугольников Так же придумал как по коодинате вершины (номер слоя, номер в слое) вычислить реальную декартову или сферическую координату вершины. Но увы нездоровится( Можешь освоить технологию снятие и наложение текстуры в OpenGL? Или разобраться как устроены файлы .3ds и .blender, чтобы сделать загрузчик моделей? Или же придумать алгоритм как юнит будет понимать, что он вышел за пределы треугольника? No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85988
superregistr Posted December 15, 2010 Author Report Share Posted December 15, 2010 * координата вершины дает координаты 6-5 своих треугольников Написана функция get6Triangles(), ее аргумент координата вершины, через указатель она возвращает 6 координат треугольников. Критерий отличия 6 треугольников от 5 - последняя координата равна предпоследней. No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-85993
superregistr Posted January 3, 2011 Author Report Share Posted January 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 Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-86630
superregistr Posted February 24, 2011 Author Report Share Posted February 24, 2011 Доделал свой механизм. С динамическими тайлами и уровнями детализации. Определение виден ли треугольник на экране или нет оставляет желать лучшего. Возможно, лучше переделать этот момент через буфер выбора или еще какой-нибудь буфер. Надо подумать. 2) позиционирование юнита на сфере 3) перемещение юнита в любом направлении Приняты дискретные положения и перемещение по узлам. No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-87680
superregistr Posted December 28, 2017 Author Report Share Posted December 28, 2017 После нескольких лет молчания, хочу сообщить, что проект не закрыт, а делается понемногу. За это время пришло новое переосмысление, что и как нужно сделать. В качестве единицы поверхности выбрал шестиугольники, как интуитивно понятные человеку. Почти полностью переписал все алгоритмы. Теперь сфера вычисляется не итерационно, а с помощью поворотов. Выглядит так. Разбивки: 4, 5, 10, 20, 30, 40, 50 Разбивка 100 тоже шустро работает, но файл сюда не влез. No comments Link to comment https://forums.arcanumclub.org/topic/8351-%D0%B4%D0%BE%D0%BB%D0%B3%D0%B8%D0%B9-%D0%BF%D1%83%D1%82%D1%8C-%D0%BE%D1%82-spherrra-%D0%BA-hexagon-area-j/#findComment-109079
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now