forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Реализую много травы (http://forum.boolean.name/showthread.php?t=3464)

ABTOMAT 27.05.2007 19:55

Реализую много травы
 
Доброго времени суток вам, товарищи! Вот, дело моего проэкта немного ковыряется, особенно после того, как школа кончилась. Хотел бы обсудить проблему, связанную с травой.
Хочу у себя в игре реализовать много травы. Но када её много, полезут тормоза и её надо будет как-то скрывать. Сначала я хотел скрывать её в зависимости от расстояния до камеры? но, учитывая, что травы у меня будет оо-о-очень много, а вычисление расстояния - это формула √(x2-x1) ² + (y2-y1)², если вычислять много раз - будут тормоза. Думаю сделать так: создаём якорь (пивот), к которому привязаны кустики травы и рассчитываем расстояние только до него а не до каждой травинки по-отдельности и в зависимости от этого скрываем или показываем всё привязанное к данному якорю вместе, таким образом уменьшая вычисления. Примерная схема сего:

Вопрос: будет ли от этого толк?

moka 27.05.2007 20:33

Re: Реализую много травы
 
Толк будет лишь в вычеслении, трисы же разумеется остануться прежними.
Толк будет, небольшой.
Ещё сделай вот что:
Не каждый цикл, а каждый период времени для каждого пучка, рандомно от 500 до 1000, каждый этот период проверяй, на дистанцию до пучка, и почему время разнобойное, это для того что-бы не в один моммент проверять для всех травинок, этим ты разгружаешь один моммент, растягивая его на относительно постоянное, и меньшее лагование =)
А плавное скрывание, используя альфу каждый цикл.

ЗЫ, конопля внизу? О чём игра? ;)

ABTOMAT 27.05.2007 21:55

Re: Реализую много травы
 
Дык мне и нужен толк в вычислении :) А можно ли вычислять отдельно для каждого кустика и сильно ли это повлияет на производительность?
З.Ы. когда рисовал, то рисовал просто кустик, а щас глянул - еонопля 100%ная :-)

ЛысыЙ_Чук-Иванчук 27.05.2007 22:45

Re: Реализую много травы
 
Global time=Millisecs()

цикл:....
.....
if Millisecs()-time>1000(в зависемости от динамики игры, если медленная то +-5000)
Update_trava()
time=Millisecs()
EndIf

И будет тебе счастье!

ABTOMAT 27.05.2007 23:38

Re: Реализую много травы
 
vlad, Update_trava() - это вычисление по каждому кусту, я так понял?

moka 28.05.2007 00:18

Re: Реализую много травы
 
Это сама функция вычесленимй, а что там решать тебе.
Отвечу прямо, толк в вычислениях относительно 1 пивота к которому привязано например 8 пучков травы, есть. Производительность вырастит в ~8 раз. :)

SBJoker 28.05.2007 00:29

Re: Реализую много травы
 
ну вы паритесь а команда EntityAutoFade нафига? Вроде именно для этого ;)

moka 28.05.2007 00:32

Re: Реализую много травы
 
Ой она же ужасно тормозная! Не навижу эту команду, лчше сделать ручками =)

johnk 28.05.2007 00:44

Re: Реализую много травы
 
Дык может математику в длл перегнать? Так то толк будет вроде.

moka 28.05.2007 00:54

Re: Реализую много травы
 
Ну там математики не очень много.
Ещё совет про траву, лучше не создавать сначала, и скрывать\показывать. А перемещать, тоесть, те что уже не видишь перемещать или срывать, если перемещать, то на место где должна быть видна другая трава.

ABTOMAT 29.05.2007 00:10

Re: Реализую много травы
 
В-общем, почитал, что вы написали и придаумал такой алгоритм:

Файл, отвечающий за расстановку травы - есть черно-белое изображение. Где оно светлое - там есть трава, где оно тёмное - там её нет, а где оно серое - по степени светлости пикселя вычисляем, много ли на это место ставить траы. Алгоритм в общих чертах:

1. Стартует игрок.
2. вокруг игрока на дистанцию, на которой показываем траву, читаем пиксели на карте покрытия травой.
3. Соответственно этому по координатам, соостветствующим этим пихселям, расставляем траву - на белых пикселях больше, на серых - меньше, на чёрных - не ставим:

4. Обновление травы. Если игрок переместился так, что какой-то куст стал от него слишком далёким, то помечаем его как невидимый. Если появилась клетка, где надо поствить траву, то мы не создаём её, а перемещаем самый дальний невидимый куст - и так по циклу.

HolyDel 29.05.2007 01:22

Re: Реализую много травы
 
читать из тексы???
каждый тик????
много пикселей (в радиусе)?????
етож будет тормозить.

moka 29.05.2007 01:48

Re: Реализую много травы
 
Значит предлагаю такую версию:
Если мир огромный, то карт травы будет немало, и трава соответственно разная.
Значит, картинок будет не одна, придерживайся 128х128, для быстрого считывания, формат пнг.
Далее, при загрузки сектора (сектор примерно 1х1 км, и на каждый сектор своя карта травы), так вот при загрузки, читаем пиксели всей карты, они могут быть (я делал так), разных цветов, например:
Чёрный - ничего.
Зелёный - Зелёная трава.
Жёлтый - пустынная.
Поносовый - Болотная.
И т.п.
И читая все кипсели, просто переносим в массив:
Dim SecGrass%(128,128) (x,z)
Каждый цвет имеет свой индекс, например, если нету травы (чёрный), то 0, если зелёная - 1, ну и т.д.
Далее уже исходя из массива, отрисовывать траву по алгоритму, скрыть, или перместить, или ещё чё ;)

Черный крыс 29.05.2007 10:00

Re: Реализую много травы
 
Мдя.....а не проще весь километр травы вогнать в один сурфейс и не париться? - тормозов не будет гарантированно! но зато появиться тоннельный эффект если будешь юзать траву с альфаканалом..... - в этом случае лучше юзать маску.

ЗЫ Занятное чтиво....если почитать со стороны юзверя то разговор получается двусмысленным.....=) Даже название топика "Реализую много травы" - сбивает с толку....=)))

Diplomat 29.05.2007 12:26

Re: Реализую много травы
 
Цитата:

читать из тексы???
каждый тик????
много пикселей (в радиусе)?????
етож будет тормозить.
Я тебе вмоляю! ))
Тут народ радостно теоретизирует, причём изначально весь разговор не имеет ничего общего с кодоприменительной практикой на Блице.
Читать из тексы- тормозить будет? Ну ессно будет. А они всю математику на Пуребасик перенесут- и не будет. Гы. Гы! Гы-гы-гыгыгы!
А кто-нибудь задумался о том, сколько отдельных траво-ёнтитей с их пивотами поддержки нужно для засаживания газоном площадки хотя бы 64х64 ? При таком количестве обьектов (позвольте догадаться- спрайты?) - производительность Блица сдохнет в мучительных конвульсиях.
А трабла ведь решена годы назад!
Карту на квадраты, в пределах квадратов траву в один сурфейс, и либо тупо автофейдить, либо использовать свой более оптимальныхз аналог ухода в ХайдЁнтити при отдалении.
А то развели тут наркобизнес, понимаешь... ))


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

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