forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Игры / Games (http://forum.boolean.name/forumdisplay.php?f=93)
-   -   Infinity Pre-Alpha (http://forum.boolean.name/showthread.php?t=12726)

Taugeshtu 27.06.2010 04:00

Ответ: Infinity Pre-Alpha
 
Thank you, Mister Genious, you've just saved our Universe!
[sarcasm]

pax 27.06.2010 10:09

Ответ: Infinity Pre-Alpha
 
Цитата:

Сообщение от Nex (Сообщение 151616)
По поводу очень больших пространств(?)
А что если разработчики делают не реальные размеры, а "наугад" допустим дистанция между планетами 2-4,000 единиц, а размер игрока 0,001 единиц и получаются не очень большие цифры. :)

Да нет, на таких маленьких размерах с камерами будет тяжело работать, тут решение другое. Надо смотреть в сторону реализации GPS приемников, которые визуализируют в 3D свои карты.

Хотя я не изучал это направление, но погу предположить что пространство разбито на определенные отрезки по всем осям и координаты каждого куба (пускай это будет куб) определяются целыми числами, а внутри каждого куба берутся свои локальные координаты в определенных масштабах, например для float a бы взял -100 000... +100 000, теперь умножим на максимальное значение int (точне диапазон от - до +) для определения квадранта = 200 000 * 4 294 967 295 = 858 993 459 000 000 мтров по каждой из осей. Внушительные размеры получаются... а если взять тип Long...

Правда придется писать свою математику которая пересчитыват такие координаты для всех объектов. Но так как у них есть математическая модель, то скорее всего это у них уже реализовано, ну возможно другим способом, т.к. я просто предположил как это может быть...

Amatsu 27.06.2010 10:13

Ответ: Infinity Pre-Alpha
 
Цитата:

Сообщение от Nex (Сообщение 151616)
По поводу очень больших пространств(?)
А что если разработчики делают не реальные размеры, а "наугад" допустим дистанция между планетами 2-4,000 единиц, а размер игрока 0,001 единиц и получаются не очень большие цифры. :)

Если там будет 200 миллиардов звезд, даже с размером игрока в 0.001 единиц, делая статичный центр координат в условном центре галактики, на окраинах у тебя начнутся глюки с полигонами, бо видюха такие огромные числа, да еще и с большой частью после запятой не переварит нормально. Кстати, идея привязать центр координат к кораблю игрока для нормального отображения моделей в любой точке галактики родилась из наблюдения за EVE. Если в игре указать камере следить за чьим-то кораблем, который собирается совершить прыжок к другой станции этой же системы, то во время прыжка за несколько секунд, пока камера еще следит за кораблем, можно заметит как его на удалении начинает страшно колбасить по части геометрии (и это не LOD, так как он вычисляется относительно камеры, а камера рядом с кораблем до последнего), явно видно как скачут полигоны из-за больших значений координат. Поэтому я решил, что в ивке либо центр координат привызан к кораблю игрока, либо он свой для каждой "локации" (например рядом со станцией или воротами) и перемещается к следующей локации при варпе.

pax 27.06.2010 10:22

Ответ: Infinity Pre-Alpha
 
А центр координат как подмечено будет находится в цента того куба, в котором сейчас находится игрок.

Amatsu 27.06.2010 10:25

Ответ: Infinity Pre-Alpha
 
Цитата:

Сообщение от pax (Сообщение 151624)
А центр координат как подмечено будет находится в цента того куба, в котором сейчас находится игрок.

Ну да, как-то так.

pax 27.06.2010 10:41

Ответ: Infinity Pre-Alpha
 
Хотя я даже зря взял отрицательный диапазон float, т.к. координаты квадрантов и так будут иметь свой знак. Пусть будет 0...200000
Допустим необходимо отрисовать квадрант игрока и все квадранты вокруг него, т.е. например игрок находится в квадранте Q1(10,12,-10) и имеет координаты P1(59000, 30200, 4000) а например база находится в координате Q2(11,11,-9) и имеет координаты P2(9000, 200, 40000), то вычисляем локальную позицию базы так PL2 = (Q1-Q2)* 200000 + P2 = (-1, -1, -1) * 200000 + (9000, 200, 40000) = (-191000, 199800, -160000)

А координаты игрока не изменятся, т.к. это будет текущий квадрант.


UPD: Посмотрел на расчеты и понял, что предложенный в начале диапазон лучше подходит, т.к. координаты внутри текущего квадранта будут "лучше" т.к. будут иметь меньший порядок. В итоге получается, что для 27 квадрантов (куб 3х3х3) максимальная координата будет ±300000 что вполне устраивает.
Еще я посчитал какие расстояния можно получить при использовании типа long - приблизительно 3 689 348 814 741 910 322 000 000 метров по каждой из осей.

Igor 27.06.2010 13:21

Ответ: Infinity Pre-Alpha
 
У меня смутное подозрение, что billion можно ещё перевести как миллион
P.S. где-то слышал, что тут какая-то фигня с переводом.
P.P.S. Гугл переводчик говорит что это миллиард

Нашел!
Английский перевод - миллиард
Американский- в 10 в 12 степени

Если предположить, что на планету нужно выделить 4 числа по 8 байт (координаты и тип), то на описание 1 миллиарда планет требуется 32 гигабайта памяти. Умножим на 200 : 6.4 терабайт памяти. Вполне реальная для сервера цифра.

Taugeshtu 27.06.2010 16:16

Ответ: Infinity Pre-Alpha
 
И как уже было сказано мной, наверняка информация о планетах вокруг звезды создается в момент, когда в неё кто-нибудь прилетает. Возможно, что и звёзды не сразу все записаны, а только те, к которым можно прилететь из тех систем, где сейчас есть игроки. Таким образом получается совсем крошечный массив данных, в который новые звезды записываются по мере открытия возможности к ним прилететь.

Amatsu 27.06.2010 18:19

Ответ: Infinity Pre-Alpha
 
На таких то технологиях, да Parkan Online... Случайная генерация планет уже есть, генерацию баз сделали еще в первом паркане, все это довести до ума и разнообразить... эх... ляпота бы была.

Gector 27.06.2010 19:05

Ответ: Infinity Pre-Alpha
 
Цитата:

На таких то технологиях, да Parkan Online...
Даааа... Крутая игра была. Все части прошел по нескольку раз.

pax 27.06.2010 23:41

Ответ: Infinity Pre-Alpha
 
Цитата:

Сообщение от Igor (Сообщение 151652)
Если предположить, что на планету нужно выделить 4 числа по 8 байт (координаты и тип), то на описание 1 миллиарда планет требуется 32 гигабайта памяти. Умножим на 200 : 6.4 терабайт памяти. Вполне реальная для сервера цифра.

Вам не приходило в голову, что для получения координат любой из планет и ее типа так же может быть применен генератор "не случайных чисел". И хранить информации о каждой планете нафиг не нужно, а достаточно одного целого числа для генерации целого сектора какой-либо галактики (а то и целой галактики), содержащей в себе сотни тысяч звездных систем.

jimon 28.06.2010 00:00

Ответ: Infinity Pre-Alpha
 
чего объяснять человеку если он не понимает что источник энтропии для генератора случайных чисел можно задавать принудительно, получая при этом всегда одинаковые последовательности ?

при этом хранить чего либо о мире вообще не надо, нужно хранить информацию о игроках и том как они взаимодействуют с игровой вселенной

pax 28.06.2010 10:15

Ответ: Infinity Pre-Alpha
 
Цитата:

Сообщение от pax (Сообщение 151627)
Еще я посчитал какие расстояния можно получить при использовании типа long - приблизительно 3 689 348 814 741 910 322 000 000 метров по каждой из осей.

С учетом того, что диаметр нашей галактики примерно 950 000 000 000 000 000 000 метров, то нам вполне хватит такого подхода для симуляции галактики Млечный путь. В нем как раз примерно 200 миллиардов звездных систем.

Amatsu 30.06.2010 11:18

Ответ: Infinity Pre-Alpha
 
В тему разговора и процедурном создании городов http://www.3dnews.ru/software-news/C...ie-3D-gorodov/


Часовой пояс GMT +4, время: 19:28.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot