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

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

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 3D-программирование

3D-программирование Вопросы, касающиеся программирования 3D мира

Ответ
 
Опции темы
Старый 15.01.2013, 01:34   #136
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Советы по оптимизации

За ксорс не скажу, но можно проверить, делается тест с сокрытием кучи энтатей по альфе и по сокрытию.
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
FREE MAN (15.01.2013)
Старый 15.01.2013, 07:10   #137
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Ладно, спс!
Ну списком я иногда подразумеваю записи тайпа.
Сегодня сделаю семпл по этой теме. И альфу с хайдом сравню.

Удачи тебе МрФ! Билетов попроще! )
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Mr_F_ (15.01.2013)
Старый 15.01.2013, 07:30   #138
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

А у меня еще один вопрос родился. У меня при работе в ксорсе иногда зависает бук, похоже на ошибку обращения к памяти (синий экран смерти). Замечаю такую тенденцию, что в основном косяк происходит при нескольких MAV'ах.
Как думаете, может ли это быть связано с тем, что в корявом коде я обращаюсь на несуществующую ссылку в память, которая в своё время уже занята другим процессом - что приводит к краху системы?
__________________
(Offline)
 
Ответить с цитированием
Старый 15.01.2013, 10:50   #139
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Отчет!!
Ну что, господа булочники)

Начну со слов Джокера
Мудрость предыдущих поколений блитцеров гласит:
не используй HideEntity без крайней нужды ибо тормазит оно, используй EntityAlpha(0) вместо него, да ускорится программа твоя.
Эта легенда не оправдалась.
У меня терпения хватило на 50к кубиков.
Скрытие в Ксорс, что с помощью xHideEntity (fps-60) ,что с помощью xEntityAlpha (fps-60)
Блитц HideEntity (fps-58 ) , EntityAlpha (fps-58 )
Легенда разрушена!!

Зато порадовала производительность Ксорса, она выше блитца на + 20%
Тест на 40к кубиков, результат отдаление с AutoFade
Blitz 4к кубиков - fps(20)
Xors 5к кубиков - fps(20)

Blitz 15к кубиков - fps(6-7)
Xors 15к кубиков - fps(8-9)
семпл блитца
Global n=15000 ;Число кубиков count of cubes
;=========================
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global camera=CreateCamera()
Global camAX#,camAY#
PositionEntity camera,0,0,-10
RotateEntity camera,0,0,0
lit=CreateLight()

Type mesh
Field mesh
Field x#,y#,z#
Field ax,ay,az
Field scale#
Field r,g,b
End Type

For i=1 To n
mesh.mesh=New mesh
mesh\mesh=CreateCube()
dist#=Rnd(10,200)
mesh\x=Rnd(-dist,dist)
mesh\z=dist
mesh\ay=Rand(0,360)
mesh\scale=Rnd(0.2,0.4)
mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
EntityAutoFade mesh\mesh,210,210
Next

Global mode=0
Global time,timeMean#
Global f1=MilliSecs()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
While Not KeyHit(1)
frame=MilliSecs()
CameraControl(camera)
RenderWorld

If KeyHit(57) Then
mode=mode+1
RestoreAllMesh()
If mode=1 Then HideAllMesh()
If mode=3 Then AlphaAllMesh(0)
EndIf

Text 5,10,"Tris: "+TrisRendered()
Text 5,30,"Cubes: "+TrisRendered()/12
If time=0 Then time=17
fps=1000/time
timeMean=(timeMean+time)/2
Text 5,50,"FPS: "+fps+" "+1000/timeMean
Text 5,70,"Mode: "+mode
Text GraphicsWidth()/2,300,"Key SPACE to switch mode 1-hide, 3-alpha(0)"
Flip
time=MilliSecs()-frame
Wend
End

Function CameraControl(cam)
camAX=camAX-MouseXSpeed()*0.3
camAY=camAY+MouseYSpeed()*0.3
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity cam,camAY,camAX,0
MoveEntity cam,(KeyDown(205)-KeyDown(203))*3,0,(KeyDown(200)-KeyDown(20)*3
End Function

Function HideAllMesh()
For mesh.mesh=Each mesh
HideEntity mesh\mesh
Next
End Function

Function AlphaAllMesh(alp#)
For mesh.mesh=Each mesh
EntityAlpha mesh\mesh,alp
Next
End Function

Function RestoreAllMesh()
For mesh.mesh=Each mesh
ShowEntity mesh\mesh
EntityAlpha mesh\mesh,1
Next
End Function

семпл ксорса

Global n=15000 ;Число кубиков count of cubes
;=========================
xGraphics3D 1024,768,32,1,0
xCreateLog(1,1,"xors_log.html")
Include "./incl/maxMode3d.bb"
xSetTextureFiltering TF_ANISOTROPIC
xSetBuffer xBackBuffer()

Global camera=xCreateCamera()
Global camAX#,camAY#
xPositionEntity camera,0,2,-10
lit=xCreateLight()

Type mesh
Field mesh
Field x#,y#,z#
Field ax,ay,az
Field scale#
Field r,g,b
End Type

For i=1 To n
mesh.mesh=New mesh
mesh\mesh=xCreateCube();xCreateSphere(4)
dist#=Rnd(10,200)
mesh\x=Rnd(-dist,dist)
mesh\z=dist
mesh\ay=Rand(0,360)
mesh\scale=Rnd(0.2,0.4)
mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
xPositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
xScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
xRotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
xEntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
xEntityAutoFade mesh\mesh,200,200
Next

Global mode=0
Global time,timeMean#
While Not xKeyHit(1)
frame=xMillisecs()
CameraControl(camera)
xRenderWorld

If xKeyHit(KEY_SPACE) Then
mode=mode+1
RestoreAllMesh()
If mode=1 Then HideAllMesh()
If mode=3 Then AlphaAllMesh(0)
EndIf

xText 5,10,"Tris: "+xTrisRendered()
xText 5,30,"Cubes: "+xDIPCounter()
xText 5,50,"FPS: "+xGetFPS()
If time=0 Then time=17
timeMean=(timeMean+time)/2
xText 5,70,"Mode: "+mode
xText xGraphicsWidth()/2,300,"Key SPACE to switch mode 1-hide, 3-alpha(0)"
xFlip
time=frame
Wend
End

Function CameraControl(cam)
camAX=camAX-xMouseXSpeed()*0.3
camAY=camAY+xMouseYSpeed()*0.3
xRotateEntity cam,camAY,camAX,0
xMoveEntity cam,xKeyDown(KEY_RIGHT)-xKeyDown(KEY_LEFT),0,xKeyDown(KEY_UP)-xKeyDown(KEY_DOWN)
End Function

Function HideAllMesh()
For mesh.mesh=Each mesh
xHideEntity mesh\mesh
Next
End Function

Function AlphaAllMesh(alp#)
For mesh.mesh=Each mesh
xEntityAlpha mesh\mesh,alp
Next
End Function

Function RestoreAllMesh()
For mesh.mesh=Each mesh
xShowEntity mesh\mesh
xEntityAlpha mesh\mesh,1
Next
End Function


Щас попробовал написать такую функцию:
Function AutoHFade(n)
For i=1 To n
	mesh.mesh=First mesh
	If EntityDistance(camera,mesh\mesh)>200 Then 
		HideEntity(mesh\mesh)
		Else
		ShowEntity(mesh\mesh)
	EndIf
	Insert mesh.mesh After Last mesh
Next
End Function

Прироста нет! Даже небольшое падение на общёте

Щас попробовал еще одну функцию, с которой вся тема и завелась в моей голове.
Функция с растоянием удаляет ентити и восстанавливает из данных полей.
Function AutoHFade(n)
For i=1 To n
mesh.mesh=First mesh
dx=mesh\x-EntityX(camera)
dy=mesh\y-EntityY(camera)
dz=mesh\z-EntityZ(camera)
dist=Sqr(dx*dx+dy*dy+dz*dz)
If dist>200 Then
FreeEntity(mesh\mesh) : mesh\mesh=0
Else
If mesh\mesh=0 Then
mesh\mesh=CreateCube()
PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
EndIf
EndIf
Insert mesh.mesh After Last mesh
Next
End Function


сам семпл bb

Global n=15000			;Число кубиков   count of cubes
;=========================
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global camera=CreateCamera()
Global camAX#,camAY#
PositionEntity camera,0,0,-10
RotateEntity camera,0,0,0
lit=CreateLight()

Type mesh
	Field mesh
	Field x#,y#,z#
	Field ax,ay,az
	Field scale#
	Field r,g,b
End Type

For i=1 To n
	mesh.mesh=New mesh
	mesh\mesh=CreateCube()
	dist#=Rnd(10,200)
	mesh\x=Rnd(-dist,dist)
	mesh\z=dist
	mesh\ay=Rand(0,360)
	mesh\scale=Rnd(0.2,0.4)
	mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
		PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
		ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
		RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
		EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
Next

Global distPivot=CreatePivot()

Global mode=0 
Global time,timeMean#,timeHAF
Global f1=MilliSecs()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
While Not KeyHit(1)
frame=MilliSecs()
CameraControl(camera)
AutoHFade(500)
timeHAF=xMillisecs()-frame
RenderWorld

If KeyHit(57) Then 
	mode=mode+1
	RestoreAllMesh()
	If mode=1 Then HideAllMesh()
	If mode=3 Then AlphaAllMesh(0)
EndIf

Text 5,10,"Tris: "+TrisRendered()
Text 5,30,"Cubes: "+TrisRendered()/12
If time=0 Then time=17
fps=1000/time
timeMean=(timeMean+time)/2
Text 5,50,"FPS: "+fps+"    "+1000/timeMean
Text 5,70,"Mode: "+mode
Text 5,120,"AutoHFade time: "+timeHAF
Text GraphicsWidth()/2,300,"Key SPACE to switch mode 1-hide, 3-alpha(0)"
Flip 
time=MilliSecs()-frame
Wend
End

Function CameraControl(cam)
	camAX=camAX-MouseXSpeed()*0.3
	camAY=camAY+MouseYSpeed()*0.3
	MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
	RotateEntity cam,camAY,camAX,0
	MoveEntity cam,(KeyDown(205)-KeyDown(203))*3,0,(KeyDown(200)-KeyDown(208))*3
End Function

Function HideAllMesh()
For mesh.mesh=Each mesh
	HideEntity mesh\mesh
Next
End Function 

Function AlphaAllMesh(alp#)
For mesh.mesh=Each mesh
	EntityAlpha mesh\mesh,alp
Next
End Function 

Function RestoreAllMesh()
For mesh.mesh=Each mesh
	ShowEntity mesh\mesh
	EntityAlpha mesh\mesh,1
Next
End Function

Function AutoHFade(n)
For i=1 To n
	mesh.mesh=First mesh
	dx=mesh\x-EntityX(camera)
	dy=mesh\y-EntityY(camera)
	dz=mesh\z-EntityZ(camera)
	dist=Sqr(dx*dx+dy*dy+dz*dz)
	If dist>200 Then 
			FreeEntity(mesh\mesh) : mesh\mesh=0
		Else
			If mesh\mesh=0 Then 
				mesh\mesh=CreateCube()
				PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
				ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
				RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
				EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b	
			EndIf		
	EndIf
	Insert mesh.mesh After Last mesh
Next
End Function

Я выполняю xFreeEntity(), а в диспечере смотрю за оперативкой и за процессором, там ничего не меняется!!
Че за фигня?!
У меня только один вывод, не придумывайте себе геморой, как это делаю я. Используйте меньше ентити и ЛОДы. Ибудет счастье!!
__________________

Последний раз редактировалось burovalex, 15.01.2013 в 14:42.
(Offline)
 
Ответить с цитированием
Старый 15.01.2013, 11:22   #140
SBJoker
Злобный Админ
 
Аватар для SBJoker
 
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений
(для 9,330 пользователей)
Ответ: Советы по оптимизации

Объявление не моё, я просто разместил объяву
__________________
(Offline)
 
Ответить с цитированием
Старый 15.01.2013, 15:42   #141
Wegox
Бывалый
 
Аватар для Wegox
 
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений
(для 1,133 пользователей)
Ответ: Советы по оптимизации

HideEntity - EntityAlpha
Скрывает объект так, что он становится невидимым и больше не участвует в столкновения.
Основное применение - позволяет Вам создавать все объекты в начале программы, скрывать их, а затем копировать их и показывать по мере необходимости в основном игра. Это более эффективно, чем создание объектов в процессе игры.
Если Вы желаете скрыть объект так, чтобы он стал невидим, но все еще участвовал в столкновениях, то используйте команду EntityAlpha 0 вместо HideEntity. Это сделает объект полностью прозрачным.
HideEntity действует на указанный объект и все его дочерние(привязанные к нему) объекты, если такие существуют.
Как видим, две совершено разные функции, выполняющие разные задачи
что их и отличает!
То-есть на мой взгляд, тест с кубиками без учёта коллизии не пруф, давай по честному тесты проводить, а то получается что функция работает процентов на 50% а с учётом коллизии будет на все 100%
Я же могу скрывать объект для оптимизации, но не трогать коллизию
(Offline)
 
Ответить с цитированием
Старый 15.01.2013, 16:26   #142
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Вот к примеру, я не пользуюсь коллизиями вообще, для это я пользуюсь физ движком.
И тест не для проверки коллизий, а что быстрее робит.
Да и вообще Хайд и Альфа я тестил только из интереса слов Джокера
Мудрость предыдущих поколений блитцеров гласит:
не используй HideEntity без крайней нужды ибо тормазит оно, используй EntityAlpha(0) вместо него, да ускорится программа твоя.
А Джокер услышал это от кого то...
Объявление не моё, я просто разместил объяву
Ну вот я решил и развеять легенду.

А суть теста вообще в другом. За место автоФейда удалять ентити. Короче надо будет, сам прочитаешь отчет
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Wegox (15.01.2013)
Старый 15.01.2013, 17:00   #143
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Советы по оптимизации

Щас попробовал написать такую функцию:
они внутри движка итак отрежутся по фрустуму.

попробуй на 1кк кубиков. и скомпиль оба ексешника пожалуйста, а то не у всех есть блиц, а потестить охота))

еще бы померить время самого скрытия с помощью альфы и хайдом. у меня в движке есть два варианта скрытия Hide / Show - которое удаляет ссылку на енити из сценграфа. оно работает долго, но зато скрытая таким образом ентити вообще никак не участвует в расчетах. так можно и миллион скрыть - и все равно ничего не изменится. и есть SetVisible - которое просто устанавливает флаг. Сам вызов SetVisible очень быстр, но скрытая таким образом ентити все равно участвует в расчетах (пусть и всего лишь проверка булевой переменной).
(Offline)
 
Ответить с цитированием
Старый 15.01.2013, 18:29   #144
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

и скомпиль оба ексешника пожалуйста, а то не у всех есть блиц
Да у меня тут инет тупой, на вахте. Завтра домой приеду, скомпилирую.
попробуй на 1кк кубиков
Ты чтооо??!?!? Какой миллион, у меня комп повис на 200к кубиков у меня комп реагировал со скоростью 1 кадр секунд 10...

Вообще тут тупой сценограф
Freeentity не освобождает ентити со сценографа. КАК ТАК!?!?!
При 100к ентити, скрываешь или удаляешь ентити, оперативка не высвобождается, проц также в напряге, и нормально становится только при 2 к кубиков.
А это фуфло! У меня в проекте уже вырастает 750 растений и 4000 плоских мешей для дебага скрытых, плюс парочках пост-эффектов с дополнительным рендером - фпс стабильное.
__________________
(Offline)
 
Ответить с цитированием
Старый 16.01.2013, 13:26   #145
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Советы по оптимизации

FreeEntity в блице должен удалять ентити и из сценграфа и из памяти. Т.е. это полное очищение)))

память по диспетчеру небось смотришь? там она может не сразу снизиться.

У меня в проекте уже вырастает 750 растений и 4000 плоских мешей для дебага скрытых, плюс парочках пост-эффектов с дополнительным рендером - фпс стабильное.
синглсюрфейс? у меня 4 кубиков на блице работает на 180 фпс на i7/2770K / 460GT.
(Offline)
 
Ответить с цитированием
Старый 16.01.2013, 23:30   #146
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Сообщение от HolyDel Посмотреть сообщение
FreeEntity в блице должен удалять ентити и из сценграфа и из памяти. Т.е. это полное очищение)))
Да я прекрасно понимаю! ) Но и сам не понимаю как это может тормозить. Завтра выкину екзешники, посмотри плиз, исходники там же будут.

Сообщение от HolyDel Посмотреть сообщение
память по диспетчеру небось смотришь? там она может не сразу снизиться.
Да, по диспечеру, но ни сразу не потом ничего не меняется.
Хотя кубики копейки весят наверное, там то только мб пишет..

Сообщение от HolyDel Посмотреть сообщение
синглсюрфейс? у меня 4 кубиков на блице работает на 180 фпс на i7/2770K / 460GT.
Не понял что 4?? миллиона?
Ну извини, не сравнивай хайтэк с буком ))
__________________
(Offline)
 
Ответить с цитированием
Старый 17.01.2013, 01:52   #147
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Советы по оптимизации

4 тысячи.
(Offline)
 
Ответить с цитированием
Старый 17.01.2013, 11:12   #148
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

Я знаю Холидел, что 4 к кубиков работает без проблем и у меня, но сють в другом, с твоим процом если вывести гдето 200к кубиков и скрыть 196 к кубиков, блитц будет тормозить..
__________________
(Offline)
 
Ответить с цитированием
Старый 24.01.2013, 22:47   #149
burovalex
Разработчик
 
Аватар для burovalex
 
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений
(для 60 пользователей)
Ответ: Советы по оптимизации

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

Мой вывод был правильный, не создавайте геморой. Максимум что можно помудрить - это разбиение на секторы. И то, надо ли это... Вряд ли ктото будет делать Обливион или Фалаут )

Погоняйте пример, мне показалось что Хайд ентити чуть быстрее работает чем Альфа(0). Тестил в углу на 3к кубиках и Хайд выиграл на пару сотен кубиков )


Global n=30000			;Число кубиков   count of cubes
;=========================
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()

Global camera=CreateCamera()
Global camAX#,camAY#
PositionEntity camera,0,0,-10
RotateEntity camera,0,0,0
CameraRange camera,0.1,400
lit=CreateLight()

Type mesh
	Field mesh
	Field x#,y#,z#
	Field ax,ay,az
	Field scale#
	Field r,g,b
End Type

Global cube=CreateCube()

For i=1 To n
	mesh.mesh=New mesh
	mesh\mesh=CopyMesh(cube)
	mesh\x=Rnd(-200,200)
	mesh\z=Rnd(-200,200)
	mesh\ay=Rand(0,360)
	mesh\scale=Rnd(0.2,0.4)
	mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
		PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
		ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
		RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
		EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
	EntityAutoFade mesh\mesh,200,200
Next

Global distPivot=CreatePivot()

Global mode=0 
Global time,timeMean#,timeHAF
Global f1=MilliSecs()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
While Not KeyHit(1)
frame=MilliSecs()
CameraControl(camera)
If mode=1 Then AutoHFade(500)
timeHAF=MilliSecs()-frame
RenderWorld

If KeyHit(57) Then 
	mode=mode+1
	RestoreAllMesh()
	If mode=2 Then HideAllMesh(n-3000)
	If mode=4 Then AlphaAllMesh(0,n-3000)
	If mode>4 Then mode=0
EndIf

Text 5,10,"Tris: "+TrisRendered()
Text 5,30,"Cubes: "+TrisRendered()/12
If time=0 Then time=17
fps=1000/time
timeMean=(timeMean+time)/2
Text 5,50,"FPS: "+fps+"    "+1000/timeMean
Text 5,70,"Mode: "+mode
Select mode
	Case 0 : modeStr$="normal auto fade"
	Case 1 : modeStr$="delete auto fade"
	Case 2 : modeStr$="hide entity"
	Case 3 : modeStr$="normal auto fade"
	Case 4 : modeStr$="Alpha = 0"
End Select
Text 5,90,"Mode: "+modeStr
Text 5,140,"AutoHFade time: "+timeHAF
Color 200,100,100 : Text GraphicsWidth()/2,300,"Key SPACE to switch mode!" : Color 255,255,255
Flip 
time=MilliSecs()-frame
Wend
End

Function CameraControl(cam)
	camAX=camAX-MouseXSpeed()*0.3
	camAY=camAY+MouseYSpeed()*0.3
	MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
	RotateEntity cam,camAY,camAX,0
	MoveEntity cam,(KeyDown(205)-KeyDown(203))*3,0,(KeyDown(200)-KeyDown(208))*3
End Function

Function HideAllMesh(n)
m=0
For mesh.mesh=Each mesh
	m=m+1
	If m<n Then HideEntity mesh\mesh
Next
End Function 

Function AlphaAllMesh(alp#,n)
m=0
For mesh.mesh=Each mesh
	m=m+1
	If m<n Then EntityAlpha mesh\mesh,alp
Next
End Function 

Function RestoreAllMesh()
For mesh.mesh=Each mesh
	If mesh\mesh=0 Then 
		mesh\mesh=CreateCube()
		PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
		ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
		RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
		EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b	
	EndIf
	ShowEntity mesh\mesh
	EntityAlpha mesh\mesh,1
	EntityAutoFade mesh\mesh,200,200
	If mode<>0 Then EntityAutoFade mesh\mesh,1000,1000	
Next
End Function

Function AutoHFade(n)
For i=1 To n
	mesh.mesh=First mesh
	dx=mesh\x-EntityX(camera)
	dy=mesh\y-EntityY(camera)
	dz=mesh\z-EntityZ(camera)
	dist=Sqr(dx*dx+dy*dy+dz*dz)
	If dist>200 Then 
			FreeEntity(mesh\mesh) : mesh\mesh=0
		Else
			If mesh\mesh=0 Then 
				mesh\mesh=CreateCube()
				PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
				ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
				RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
				EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b	
			EndIf		
	EndIf
	Insert mesh.mesh After Last mesh
Next
End Function


Компиль http://www.sendspace.com/file/ia8zkw
__________________
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Arton (24.01.2013)
Старый 24.01.2013, 23:17   #150
Arton
Быдлокодер
 
Аватар для Arton
 
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений
(для 5,349 пользователей)
Ответ: Советы по оптимизации

Сообщение от burovalex Посмотреть сообщение
Извиняюсь, что на тему подзабил, выкидываю екзешник и исходник в спойлере.

Мой вывод был правильный, не создавайте геморой. Максимум что можно помудрить - это разбиение на секторы. И то, надо ли это... Вряд ли ктото будет делать Обливион или Фалаут )

Погоняйте пример, мне показалось что Хайд ентити чуть быстрее работает чем Альфа(0). Тестил в углу на 3к кубиках и Хайд выиграл на пару сотен кубиков )
ХайдЭнтити самое оно, остальное выдавало FPS от 1 до 16 максимум.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

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


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


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