Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > Blitz3D > Библиотеки

Библиотеки Сторонние библиотеки для Blitz

Ответ
 
Опции темы
Старый 29.12.2011, 00:04   #16
HolyDel
 
Регистрация: 25.09.2006
Сообщений: 6,030
Написано 1,469 полезных сообщений
(для 2,690 пользователей)
Ответ: Секционная разбивка

ну ладно, подготавливаем.

самое основное это ответ на твой вопрос - "и заодно узнаем скока всего объектов в ней". работает быстро.
(Offline)
 
Ответить с цитированием
Старый 29.12.2011, 10:40   #17
H@NON
Дэвелопер
 
Регистрация: 17.01.2007
Сообщений: 1,552
Написано 351 полезных сообщений
(для 772 пользователей)
Ответ: Секционная разбивка

для любителей покопаться в коде, у меня это выглядет несколько по другому :
Global maxArrayX
Global maxArrayY
Global maxArrayThings
Global ArrayStartX			= 0
Global ArrayStartY			= 0
Global ArrayStepX 		= 10 
Global ArrayStepY			= 10
Global ArrayHeroRadiusX	= 1
Global ArrayHeroRadiusY	= 1
Global maxArrayParams	= 3
Dim ThingsArray(maxArrayX,maxArrayY,maxArrayThings,maxArrayParams)
Const ArrayThingType = 0, ArrayThingHNDL = 1, ArrayThingCnt=2, ArraySingleMesh=3

Function InitArrayThings(x, y, thingsCnt)
	Dim ThingsArray(0,0,0,0)
	maxArrayX = x
	maxArrayY = y
	maxArrayThings = thingsCnt
	Dim ThingsArray(maxArrayX,maxArrayY,maxArrayThings,maxArrayParams)
End Function

Function GetArrayX(x#)
	Return Floor ((x - ArrayStartX) / ArrayStepX)
End Function

Function GetArrayY(y#)
	Return Floor ((y - ArrayStartY) / ArrayStepY)
End Function

Function AddThingToArray(HNDL)
	Local dx#,dy#,dz#,cnt
	
	Local t.ThingT = Object.ThingT(HNDL)
	dx = GetArrayX(xEntityX(t\ent,1))
	dy = GetArrayY(xEntityZ(t\ent,1))
	If dy>=0 And dx>=0 And dy <= maxArrayY And dx <= maxArrayX Then
		If ThingsArray(dx,dy,0,ArrayThingCnt) < maxArrayThings Then
			ThingsArray(dx,dy,0, ArrayThingCnt) = ThingsArray(dx,dy,0, ArrayThingCnt) + 1
			cnt = ThingsArray(dx,dy,0, ArrayThingCnt)
			ThingsArray(dx,dy,cnt, ArrayThingType) = t\typ
			ThingsArray(dx,dy,cnt, ArrayThingHNDL) = HNDL
			t\ArrayX = dx
			t\ArrayY = dy
			t\ArrayNum = cnt
			Return True
		Else
			;RuntimeError("no more things to array.")
			Return False
		EndIf
	Else
		;RuntimeError("thing out from array.")
		Return False
	EndIf
End Function

Function MergeThingArray(HNDL,n,x,y)
	FreeThingFromArray(x,y,n)
	AddThingToArray(HNDL)
End Function

Function FreeThingFromArray(x,y,n)
	Local cnt, k, t.ThingT
	cnt = ThingsArray(x,y,0,ArrayThingCnt)
	If n = cnt Then
		ThingsArray(x,y,n,ArrayThingType) = 0
		ThingsArray(x,y,n,ArrayThingHNDL) = 0
	Else
		For k = n+1 To cnt
			ThingsArray(x,y,k-1,ArrayThingType) = ThingsArray(x,y,k,ArrayThingType)
			ThingsArray(x,y,k-1,ArrayThingHNDL) = ThingsArray(x,y,k,ArrayThingHNDL)
			t.ThingT = Object.ThingT(ThingsArray(x,y,k,ArrayThingHNDL))
			t\ArrayNum = k-1
		Next
	EndIf
	ThingsArray(x,y,0,ArrayThingCnt) = ThingsArray(x,y,0,ArrayThingCnt) - 1
End Function

Function UpdateArrayThings()
	Local cnt, N, X, Y
	For X = H\ArrayX-ArrayHeroRadiusX To H\ArrayX+ArrayHeroRadiusX
		For Y = H\ArrayY-ArrayHeroRadiusY To H\ArrayY+ArrayHeroRadiusY
			If InArrayCheck(X, Y) Then
				cnt = ThingsArray(X,Y,0,ArrayThingCnt)
				For N = 1 To cnt
					CheckAndUseThing(ThingsArray(X,Y,N,ArrayThingType), ThingsArray(X,Y,N,ArrayThingHNDL))
				Next
			EndIf
		Next
	Next
End Function

Function InArrayCheck(x, y)
	If y>=0 And x>=0 And y <= maxArrayY And x <= maxArrayX Then Return True
	Return False
End Function
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо H@NON за это полезное сообщение:
HolyDel (29.12.2011), LLI.T.A.L.K.E.R. (29.12.2011)
Старый 29.12.2011, 21:23   #18
Черный крыс
 
Сообщений: n/a
Ответ: Секционная разбивка

H@NON - некрофил!
 
Ответить с цитированием
Старый 29.12.2011, 21:48   #19
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Секционная разбивка

Сообщение от Diablo1909 Посмотреть сообщение
H@NON - некрофил!
Разница времени сообщения H@NONа от предыдущего около 10 часов.

ЗЫ: да HolyDel делал библиотечку в 2007, может в чём-то можно упрекнуть код или сам способ реализации..
Но Blitz3D всё ещё требуется великая оптимизация.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (29.12.2011)
Старый 01.01.2012, 18:15   #20
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Секционная разбивка

Видео:

Сектора (ячейки) перед зрением игрока становятся видимыми, остальные остаются скрытыми (ShowEntity | HideEntity).

Квадратами могут быть и комнаты со множеством приборов интерьера, или же леса, поля с деревьями и камнями (на что я и рассчитываю).
Лучшим будет если деревья AddMesh-ить в один меш поля.

Для наглядности размер квадратов 50. Применять можно и большие величины (как DeltaForce)

Пока идёт перебор всех ячеек вокруг в радиусе (затем сортировка). Нужно постараться оптимизировать код для меньшего перебора.

Про момент: игрок идёт назад и попадает в невидимый на тот момент сектор - просто пивот передвинуть на b3d-метры назад, чтобы зад мог подготовиться.

Последний раз редактировалось LLI.T.A.L.K.E.R., 02.01.2012 в 03:32.
(Offline)
 
Ответить с цитированием
Старый 07.01.2012, 06:41   #21
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Секционная разбивка

(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо LLI.T.A.L.K.E.R. за это полезное сообщение:
mauNgerS (07.01.2012), moka (09.01.2012)
Старый 21.07.2012, 18:03   #22
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 36 полезных сообщений
(для 59 пользователей)
Ответ: Секционная разбивка

Сталкер, в начале ты нормальную тему раскручивал, а сейчас тебя немного не туда понесло )
Дело в том, что блитз автоматически проверяет что входит в обзор камеры и скрывает ненужные элементы.
Сам попробуй - запихни на сцену в одном месте например 100 сфер детализацией 64, выдай фпс и отверни от них камеру
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
ABTOMAT (21.07.2012)
Старый 21.07.2012, 18:35   #23
moka
.
 
Регистрация: 04.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений
(для 6,861 пользователей)
Ответ: Секционная разбивка

Тут скорее оптимизация не рендера, а логики.
(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо moka за это полезное сообщение:
HolyDel (22.07.2012), LLI.T.A.L.K.E.R. (14.04.2014), radiobutton (22.07.2012)
Старый 22.07.2012, 08:21   #24
LLI.T.A.L.K.E.R.
Мастер
 
Аватар для LLI.T.A.L.K.E.R.
 
Регистрация: 24.06.2009
Адрес: Набережные Челны
Сообщений: 930
Написано 292 полезных сообщений
(для 504 пользователей)
Ответ: Секционная разбивка

Сообщение от burovalex Посмотреть сообщение
Сталкер, в начале ты нормальную тему раскручивал, а сейчас тебя немного не туда понесло )
Дело в том, что блитз автоматически проверяет что входит в обзор камеры и скрывает ненужные элементы.
Сам попробуй - запихни на сцену в одном месте например 100 сфер детализацией 64, выдай фпс и отверни от них камеру
http://www.youtube.com/watch?v=K0_eh...ilpage#t=66 s
Разница всё же есть. Просто обдумывать блитзу придётся меньше объектов.

То что квадратики в начале видео - это сектора, в них может быть до 100 (и более) мини-объектов.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дальность прорисовки или разбивка на блоки Ekzi 3D-программирование 10 08.11.2007 12:34


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com