Просмотр полной версии : Зона видимости
GoldFinch
25.11.2008, 17:52
Сервер шлет информацию о других игроках\нпс находящихся внутри квадрата с центром в игроке, или внутри окружности?
GoldFinch, если я тя правильно понял, ответ лаконичен а какая нах разница теж яйца ток вид с боку я думаю что если видимость в радиусе то это окружность
точнее - шар.
Добавлено через 2 минуты
кстати, интересен алгоритм, как сервер просчитывает вхождение чаров в зону видимости, по идее там очень нефиговая должна быть выборка....
Добавлено через 10 минут
И все гораздо упрастится, если принять, что сервер "строит" кубы. не надо просчитывать вхождение точки в шар, а только сравнить две точки с "погрешностью" - заданной как "радиус" видимости
точнее - шар. ну если вообще попробовать додуматься то скорей всего там упрощенка 1-точка до 2-й точки меньше ли радиуса => покажем обоим ) нету и есть ощущение что на иле чем больше мобов объектов тем клиент сильней режет область видимого
GoldFinch
25.11.2008, 20:25
вот мне и интересно, куб или шар.
я думаю на сервере вся область поделена на кубы и чар видит тех кто в его кубе + тех кто в соседних кубах, ибо это на мой взглад самый разумный и быстрый способ...
Куб: при максимальньном уменьшении карты в валкере все мобы стоят в форме кадрата, необязательно в катах, тк там комнаты прямоугольно расположены. Стоя в катах и убрав Z ограничение бегающие по поверхности тивнки появляются на границе мобов под землей, потому куб. А куб потому, что вхождение точки быстрее всего вычисляется, сравнивается X1 и Х2-растояние видимости, для круга нужно вычислять корни и квадраты, квадрат ето умножение, а умножение раз в 10 дольше сложения, корень ето вобще цикл.
Мегамозг
26.11.2008, 05:03
Куб: при максимальньном уменьшении карты в валкере все мобы стоят в форме кадрата, необязательно в катах, тк там комнаты прямоугольно расположены. Стоя в катах и убрав Z ограничение бегающие по поверхности тивнки появляются на границе мобов под землей, потому куб. А куб потому, что вхождение точки быстрее всего вычисляется, сравнивается X1 и Х2-растояние видимости, для круга нужно вычислять корни и квадраты, квадрат ето умножение, а умножение раз в 10 дольше сложения, корень ето вобще цикл.
И корень и умножение это есть сдвиг и они не медленней сложения ))
Учите ассемблер.
Мегамозг
26.11.2008, 05:04
Умножение имелось в виду по степени двойки, что часто применяется в математике 3d объектов.
Для того чтобы пощитать вхождение координаты в квадрат нужно провести 1 сложение и 1 сравнение.
Для того чтобы пощитать вхождения координаты в окружность нужно 1 корень, 1 квадрат, 2 сложения, 1 сравнение.
В любом случае куб быстрее шара. У асм нету корня и квадрата, самое простое ето перемножить 2 числа. Клиссические Си и ява множат 2 числа, а корень хуйпросцыш как, наверно циклом.
Незнаю, как ето можно умудрится получить корень 1 сдвигом быстрее сложения ?
GoldFinch
26.11.2008, 15:01
Для корня есть FPU.
Чтобы проверить радиус, корень можно не брать, сразу сравнивать с квадратом радиуса.
Умножение сдвигом - только на степень двойки, корень сдвигом - только для четный степеней двойки, для данного случая это никак не применимо.
я думаю на сервере вся область поделена на кубы и чар видит тех кто в его кубе + тех кто в соседних кубах, ибо это на мой взглад самый разумный и быстрый способ...
думаю вертикальным прямоугольным столбом относительно броадкестера пакета
вот на джаве проверка
(dx*dx + dy*dy + dz*dz) < radius * radius;
на офф сервере я думаю наверное что то типа
abs(dx) < radius && abs(dy)< radius && abs(dz)< radius;
зачем это умножение вообще?? :)
да и добавлю
-офф сервер выдает клиенту тех персонажей которые попадают в столб с круговым сечением - т.е. проверка попадания точки в круг
-а когда выполняется передача движения других персонажей то проверка на пересечение с столбом квадратного сечения - т.е. пересечение линии и прямоугольника
На основе моих наблюдений за ботами:
- куб
- ты не видишь что происходит в соседнем кубе пока ты не приблизишься близко к его границе, даже если часть того куба уже должна находится в зоне видимости
- ты продолжаешь некоторое время видеть, что происходит в покинутом тобой кубе
- границы кубов совпадают с границами, на которых клиент подгружает локации (игровой лаг при переходе)
- мобы неактивны, если в кубе никого нету. За счёт этого можно освободить часть локации, если в её пределах несколько кубов. Если оставить твинка в одном углу на несколько часов, свободно пердвигающиеся мобы уйдут в соседние кубы и там заморозятся.
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot