<div class='quotetop'>Цитата(Дядька * 7.5.2010, 11:10) [snapback]335378[/snapback]</div>ну в вашей системе генерации очевидно без геометрии не обойтись.полезно для определения расстояний, построения кривых,
наверняка есть численные методы для сферической системы координат (построение кривых),
удобно использовать как тайловую систему координат (юниты) так и сферическую (генерация карты),
[/b]
я сам предполагал использование "клеточных" алгоритмов, чтобы география генерилась итерационно от одного узла к другому. подобно тому как дифференцируются клетки при развитии организма.
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 11:10) [snapback]335378[/snapback]</div>возможно списки по широте и долготекстати, как индексировать тайлы собираетесь ?
[/b]
вообще разметка поверхности представляет граф. вершины характеризуются своими соседями и геометрическими характеристиками вроде широты и долготы для визуализации.
зы: с суперрегистром разные взгляды у нас на эту тему.
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
Говорила мне мама учи математику.........<div class='quotetop'>Цитата</div>полином[/b]
Индексация тайлов или узлов (вершин) вопрос кстати важный, даже очень. Лучший вариант это ID соответствующий порядковому номеру от северного полюса по спирали до южного плюс сферические координаты плюс список соседей, полярные координаты уже на любителя их можно вычислить в любой момент по необходимости и на мой вкус нефиг засорять базу...
Разработка игры Вселенная: расширяя пределы. Universe: extending the frontier. (UEF)
<div class='quotetop'>Цитата(Peter * 7.5.2010, 12:06) [snapback]335393[/snapback]</div><div class='quotetop'>Цитата(Дядька * 7.5.2010, 11:10) [snapback]335378[/snapback]зы: с суперрегистром разные взгляды у нас на эту тему.кстати, как индексировать тайлы собираетесь ? [/b]
[/b][/quote]
У меня будут три матрицы, просто матрицы-строки:
1-матрица: координаты узлов (i-ого узла) в сферической системе координат дискретный радиус, угол тета, угол фи, закручиваются последовательно с севера на юг по правилу правого винта (построено)
2-матрица: координаты треугольников (i-ого треугольника) в номерах узлов, обеспечивают связь треугольник --> его узлы (построено).
3-матрица: номера треугольников, окружающие узел (i-ый узел), обеспечивают связь узел --> содержащие его треугольники (предстоит построить).
Так организуется взаимнообратная видемость. Каждый треугольник видит свои узлы. Каждый узел видит свои треугольники. Таким образом, тайл видит соседний тайл.
<div class='quotetop'>Цитата(Peter * 7.5.2010, 11:06) [snapback]335393[/snapback]</div>пробовал - получается как в CTP с кучей дырок, мое больше на глобус смахиваетя сам предполагал использование "клеточных" алгоритмов, чтобы география генерилась итерационно от одного узла к другому. подобно тому как дифференцируются клетки при развитии организма.
[/b]![]()
<div class='quotetop'>Цитата(Peter * 7.5.2010, 11:06) [snapback]335393[/snapback]</div><div class='quotetop'>Цитата(Дядька * 7.5.2010, 11:10) [snapback]335378[/snapback]возможно списки по широте и долготекстати, как индексировать тайлы собираетесь ?
[/b]
вообще разметка поверхности представляет граф. вершины характеризуются своими соседями и геометрическими характеристиками вроде широты и долготы для визуализации.
зы: с суперрегистром разные взгляды у нас на эту тему.
[/b][/quote]
если генерить сферу из икосаэдра, логично использовать индексы его граней, после разбивки добавлять еще индекс и тд - думаю ускорит построение графа, хотя тоже не без недостатков, погуглевать нужно, наверняка велосипед уже есть![]()
<div class='quotetop'>Цитата(superregistr * 7.5.2010, 11:32) [snapback]335398[/snapback]</div><div class='quotetop'>Цитата(Peter * 7.5.2010, 12:06) [snapback]335393[/snapback]<div class='quotetop'>Цитата(Дядька * 7.5.2010, 11:10) [snapback]335378[/snapback]зы: с суперрегистром разные взгляды у нас на эту тему.кстати, как индексировать тайлы собираетесь ? [/b]
[/b][/quote]
У меня будут три матрицы, просто матрицы-строки:
1-матрица: координаты узлов (i-ого узла) в сферической системе координат дискретный радиус, угол тета, угол фи, закручиваются последовательно с севера на юг по правилу правого винта (построено)
2-матрица: координаты треугольников (i-ого треугольника) в номерах узлов, обеспечивают связь треугольник --> его узлы (построено).
3-матрица: номера треугольников, окружающие узел (i-ый узел), обеспечивают связь узел --> содержащие его треугольники (предстоит построить).
Так организуется взаимнообратная видемость. Каждый треугольник видит свои узлы. Каждый узел видит свои треугольники. Таким образом, тайл видит соседний тайл.
[/b][/quote]
прикинь, сколько придется перебрать узлов, чтобы проверить и найти оптимальный путь, если морской или сухопутный юнит отправится на другой конец шарика;
в Иксах такая задача решается, но там всего 300 секторов, а тут несколько тысяч тайлов, узлов еще больше.
здесь напрашивается использовать сферические координаты, а тайлы применять для текущего отображения юнита и различных проверок (земля/вода, наличие объекта в тайле и тд), но все равно нужен алгоритм практически мгновенного определения индекса тайла по координатам, чтобы использовать обозначенные тобой базы (графы), здесь возможно принцип иерархии от икосаэдра пригодится - тайл будет определен за несколько циклов
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 12:35) [snapback]335399[/snapback]</div>каких дырокпробовал - получается как в CTP с кучей дырок, мое больше на глобус смахивает![]()
[/b]
<div class='quotetop'>Цитата(Peter * 7.5.2010, 11:06) [snapback]335393[/snapback]</div>у меня граф строится прямо при разбиении.если генерить сферу из икосаэдра, логично использовать индексы его граней, после разбивки добавлять еще индекс и тд - думаю ускорит построение графа, хотя тоже не без недостатков, погуглевать нужно, наверняка велосипед уже есть
[/b]
индексирование нужно я так понимаю для поиска по координатам...
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 12:35) [snapback]335399[/snapback]</div><div class='quotetop'>Цитата(Peter * 7.5.2010, 11:06) [snapback]335393[/snapback]пробовал - получается как в CTP с кучей дырок, мое больше на глобус смахиваетя сам предполагал использование "клеточных" алгоритмов, чтобы география генерилась итерационно от одного узла к другому. подобно тому как дифференцируются клетки при развитии организма.
[/b]![]()
[/b][/quote]
Да, я тоже думаю надо по такому алгоритму: создается очаг и от него расползается материк. Но над алгоритмами генерации карт буду думать в последнюю очередь, вместо него первое время будет рукотворный редактор
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 12:46) [snapback]335402[/snapback]</div>Здесь разные методы можно придумать. Мой самый любимый: самообучение по принципу человека. Когда человек смотрит на карту, он же не перебирает все узлы или треугольники подряд. А вообще задачка смахивает на нахождение функционалов с последущим их запоминаем.прикинь, сколько тебе придется перебрать узлов, чтобы проверить и найти оптимальный путь, если морской или сухопутный юнит отправится на другой конец шарика;
в Иксах такая задача решается, но там всего 300 секторов, а тут несколько тысяч тайлов, узлов еще больше.
[/b]
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 12:46) [snapback]335402[/snapback]</div>Кстати, а в цив4 разве не так делается? Та же самая задача.прикинь, сколько тебе придется перебрать узлов, чтобы проверить и найти оптимальный путь, если морской или сухопутный юнит отправится на другой конец шарика;
в Иксах такая задача решается, но там всего 300 секторов, а тут несколько тысяч тайлов, узлов еще больше.
[/b]
<div class='quotetop'>Цитата(superregistr * 7.5.2010, 12:59) [snapback]335404[/snapback]</div>за него это компьютер делаетЗдесь разные методы можно придумать. Мой самый любимый: самообучение по принципу человека. Когда человек смотрит на карту, он же не перебирает все узлы или треугольники подряд.
[/b]
находит оптимальный маршрут
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата(Peter * 7.5.2010, 13:11) [snapback]335407[/snapback]</div><div class='quotetop'>Цитата(superregistr * 7.5.2010, 12:59) [snapback]335404[/snapback]за него это компьютер делаетЗдесь разные методы можно придумать. Мой самый любимый: самообучение по принципу человека. Когда человек смотрит на карту, он же не перебирает все узлы или треугольники подряд.
[/b]
находит оптимальный маршрут
[/b][/quote]
Это означает, что в первый раз комп спроектирует не самый лучший маршрут (ведь так же было и с людьми?), но по мере накопления опыта будет проектировать все лучше и лучше, постепенно находя все более лучшие варианты.
<div class='quotetop'>Цитата(Peter * 7.5.2010, 11:46) [snapback]335403[/snapback]</div><div class='quotetop'>Цитата(Дядька * 7.5.2010, 12:35) [snapback]335399[/snapback]каких дырокпробовал - получается как в CTP с кучей дырок, мое больше на глобус смахивает![]()
[/b]
[/b][/quote]
морских
<div class='quotetop'>Цитата(superregistr * 7.5.2010, 11:59) [snapback]335404[/snapback]</div>граф конечно тоже используют но наверняка не в лоб,Кстати, а в цив4 разве не так делается? Та же самая задача.
[/b]
думаю, используют прямую и линейную зависимость между координатами и индексами, чего у нас нет
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 13:17) [snapback]335410[/snapback]</div><div class='quotetop'>Цитата(superregistr * 7.5.2010, 11:59) [snapback]335404[/snapback]граф конечно тоже используют но наверняка не в лоб,Кстати, а в цив4 разве не так делается? Та же самая задача.
[/b]
думаю, используют прямую и линейную зависимость между координатами и индексами, чего у нас нет
[/b][/quote]
Ну допустим, что дает линейная зависимость при поиске оптимального пути? Не, та же самая задача, на сфере линейными становятся углы тета и фи.
я думаю, там просто банальный перебор, возможно с какими-то немного убыстряющими условиями.
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 13:17) [snapback]335410[/snapback]</div>для поиска расстояния на графе координаты знать ненужно, достаточно знать расстояния между вершинамиграф конечно тоже используют но наверняка не в лоб,
думаю, используют прямую и линейную зависимость между координатами и индексами, чего у нас нет
[/b]
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 13:17) [snapback]335410[/snapback]</div>то есть 1-2 клеточных "озерков"?морских
[/b]
насколько я могу судить при "клеточной" генерации их образование очень маловероятно. скорее наоборот придется их накидывать после создания основного ландшафта. впрочем нужно попробовать сначала.
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата(superregistr * 7.5.2010, 12:23) [snapback]335411[/snapback]</div>думаю задача решается в несколько приемов:Ну допустим, что дает линейная зависимость при поиске оптимального пути? Не, та же самая задача, на сфере линейными становятся углы тета и фи.
я думаю, там просто банальный перебор, возможно с какими-то немного убыстряющими условиями.
[/b]
1 сначала быстрый алгоритм - линия, проверка всех тайлов на которые попадает юнит двигаясь вдоль,
2 потом обход препядствий - поперечная линия из тайла который должен быть обойден, проверка алгоритмом 1,
3 и только, если не вышло за несколько итераций 2 варианта - тупой перебор.
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 13:30) [snapback]335413[/snapback]</div>обычно в играх применяется А* и его модификации или алгоритм Лидумаю задача решается в несколько приемов:
[/b]
инфа 100%
EC2 - разработка игры
Мастерская Steam - мои моды для Civilization V
Last Citadel - сайт игроков Warlords III
<div class='quotetop'>Цитата(Дядька * 7.5.2010, 13:30) [snapback]335413[/snapback]</div>Тоже самое и на сфере можно сделать. Не вижу различий.думаю задача решается в несколько приемов:
1 сначала быстрый алгоритм - линия, проверка всех тайлов на которые попадает юнит двигаясь вдоль,
2 потом обход препядствий - пореречная линия из тайла который должен быть обойден, проверка алгоритмом 1,
3 и только, если не вышло за несколько итераций 2 варианта - тупой перебор.
[/b]
Мне кажется, там тупо вырезается прямоугольник с диагональными точками: начало-конец, возможно он немного расширяется. А потом программа начинает варировать все (а может и не все) пути и находит экстремум функионала.
<div class='quotetop'>Цитата(Peter * 7.5.2010, 13:33) [snapback]335414[/snapback]</div>ок, щас прочту
Изрядно повозившись с OpenGL, разобрался с отображениями изображения. Есть такое понятие таблица отображений. Она отвечает за статичную сцену и очень заметно повышает производительность, например, крутить сцену за счет того, что объекты сцены хранятся в буфере. Почему в моей проге сферу можно быстро крутить без тормозов? (у меня без тормозов) Потому что сфера находится в таблице отображений, которая хранится в буфере. В противном случае с каждым изменением осуществлялось перерисовка заново всех треугольников (пробовал, действительно тормоза). Итак, таблица отображений содержит статическую картинку, но! ее (конкретную таблицу отображений) можно изменить с помощью функций и методов и переопределения переменной, хранящей уникальный номер таблицы отображений.
Что это дает? Много, очень много. Создаем n таблиц отображений, одна таблица на треугольник. Теперь все треугольники хранятся в буфере как данные. Теперь изменяю несколько таблиц отображений (несколько треугольников), например, чтобы поднять или опустить узел. Остальные данные остаются нетронутыми статическими данными -- следовательно тормозов нет и не будет. Измененные треугольники теперь перезаписываются в свои таблицы отображений. Результат - колоссальная производительность.
Теперь отвечу на ваши вопросы Qt4 как API для OpenGL. Для работы с OpenGL в Qt4 есть три определяемые разработчиком функции:
virtual void initializeGL() // автоматически вызывается первой и только один раз, в ней разработчик делает настройки и инициализации OpenGL
virtual void resizeGL(int nW, int nH) // автоматически вызывается второй и только один раз, нужна, чтобы связать сцену с размером виджета (окна), так же вызывается при изменении размеров окна, в ней так же логично задать матрицу проектирования или проекцию
virtual void paintGL() // вызывается автоматически при вызове команд обновить изображение, вызывается любое количество раз, заменяет старое изображение на новое
Вообщем все предельно логично, интуитивно понятно и просто.
<div class='quotetop'>Цитата(superregistr * 15.5.2010, 18:48) [snapback]336084[/snapback]</div>Восхищаюсь твоим упорством, поддерживаю всецело. Как лето закончится продолжу работу над начатым.![]()
Построил, как и задумывал, базы данных, с помощью которых:
- треугольник видит свои узлы;
- узел видит свои треугольники.
Демонстрационная программа прилагается, используйте клавиши "N" (узел++) и "M" (узел--).
[/b]
Разработка игры Вселенная: расширяя пределы. Universe: extending the frontier. (UEF)