PDA

Просмотр полной версии : Зона видимости


GoldFinch
25.11.2008, 17:52
Сервер шлет информацию о других игроках\нпс находящихся внутри квадрата с центром в игроке, или внутри окружности?

Grinch
25.11.2008, 18:04
GoldFinch, если я тя правильно понял, ответ лаконичен а какая нах разница теж яйца ток вид с боку я думаю что если видимость в радиусе то это окружность

PanAm
25.11.2008, 19:09
точнее - шар.

Добавлено через 2 минуты
кстати, интересен алгоритм, как сервер просчитывает вхождение чаров в зону видимости, по идее там очень нефиговая должна быть выборка....

Добавлено через 10 минут
И все гораздо упрастится, если принять, что сервер "строит" кубы. не надо просчитывать вхождение точки в шар, а только сравнить две точки с "погрешностью" - заданной как "радиус" видимости

Grinch
25.11.2008, 20:20
точнее - шар. ну если вообще попробовать додуматься то скорей всего там упрощенка 1-точка до 2-й точки меньше ли радиуса => покажем обоим ) нету и есть ощущение что на иле чем больше мобов объектов тем клиент сильней режет область видимого

GoldFinch
25.11.2008, 20:25
вот мне и интересно, куб или шар.

xkor
25.11.2008, 21:33
я думаю на сервере вся область поделена на кубы и чар видит тех кто в его кубе + тех кто в соседних кубах, ибо это на мой взглад самый разумный и быстрый способ...

Xa4ik
25.11.2008, 21:42
Куб: при максимальньном уменьшении карты в валкере все мобы стоят в форме кадрата, необязательно в катах, тк там комнаты прямоугольно расположены. Стоя в катах и убрав Z ограничение бегающие по поверхности тивнки появляются на границе мобов под землей, потому куб. А куб потому, что вхождение точки быстрее всего вычисляется, сравнивается X1 и Х2-растояние видимости, для круга нужно вычислять корни и квадраты, квадрат ето умножение, а умножение раз в 10 дольше сложения, корень ето вобще цикл.

Мегамозг
26.11.2008, 05:03
Куб: при максимальньном уменьшении карты в валкере все мобы стоят в форме кадрата, необязательно в катах, тк там комнаты прямоугольно расположены. Стоя в катах и убрав Z ограничение бегающие по поверхности тивнки появляются на границе мобов под землей, потому куб. А куб потому, что вхождение точки быстрее всего вычисляется, сравнивается X1 и Х2-растояние видимости, для круга нужно вычислять корни и квадраты, квадрат ето умножение, а умножение раз в 10 дольше сложения, корень ето вобще цикл.

И корень и умножение это есть сдвиг и они не медленней сложения ))
Учите ассемблер.

Мегамозг
26.11.2008, 05:04
Умножение имелось в виду по степени двойки, что часто применяется в математике 3d объектов.

Xa4ik
26.11.2008, 14:22
Для того чтобы пощитать вхождение координаты в квадрат нужно провести 1 сложение и 1 сравнение.
Для того чтобы пощитать вхождения координаты в окружность нужно 1 корень, 1 квадрат, 2 сложения, 1 сравнение.
В любом случае куб быстрее шара. У асм нету корня и квадрата, самое простое ето перемножить 2 числа. Клиссические Си и ява множат 2 числа, а корень хуйпросцыш как, наверно циклом.
Незнаю, как ето можно умудрится получить корень 1 сдвигом быстрее сложения ?

GoldFinch
26.11.2008, 15:01
Для корня есть FPU.
Чтобы проверить радиус, корень можно не брать, сразу сравнивать с квадратом радиуса.
Умножение сдвигом - только на степень двойки, корень сдвигом - только для четный степеней двойки, для данного случая это никак не применимо.

Jes
02.12.2008, 15:22
я думаю на сервере вся область поделена на кубы и чар видит тех кто в его кубе + тех кто в соседних кубах, ибо это на мой взглад самый разумный и быстрый способ...
думаю вертикальным прямоугольным столбом относительно броадкестера пакета

вот на джаве проверка
(dx*dx + dy*dy + dz*dz) < radius * radius;
на офф сервере я думаю наверное что то типа
abs(dx) < radius && abs(dy)< radius && abs(dz)< radius;

зачем это умножение вообще?? :)

Jes
05.12.2008, 13:28
да и добавлю
-офф сервер выдает клиенту тех персонажей которые попадают в столб с круговым сечением - т.е. проверка попадания точки в круг
-а когда выполняется передача движения других персонажей то проверка на пересечение с столбом квадратного сечения - т.е. пересечение линии и прямоугольника

Аноним2
03.02.2009, 03:45
На основе моих наблюдений за ботами:
- куб
- ты не видишь что происходит в соседнем кубе пока ты не приблизишься близко к его границе, даже если часть того куба уже должна находится в зоне видимости
- ты продолжаешь некоторое время видеть, что происходит в покинутом тобой кубе
- границы кубов совпадают с границами, на которых клиент подгружает локации (игровой лаг при переходе)
- мобы неактивны, если в кубе никого нету. За счёт этого можно освободить часть локации, если в её пределах несколько кубов. Если оставить твинка в одном углу на несколько часов, свободно пердвигающиеся мобы уйдут в соседние кубы и там заморозятся.