|
3D-программирование Вопросы, касающиеся программирования 3D мира |
15.01.2013, 01:34
|
#136
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Советы по оптимизации
За ксорс не скажу, но можно проверить, делается тест с сокрытием кучи энтатей по альфе и по сокрытию.
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.01.2013, 07:10
|
#137
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
Ладно, спс!
Ну списком я иногда подразумеваю записи тайпа.
Сегодня сделаю семпл по этой теме. И альфу с хайдом сравню.
Удачи тебе МрФ! Билетов попроще! )
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.01.2013, 07:30
|
#138
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
А у меня еще один вопрос родился. У меня при работе в ксорсе иногда зависает бук, похоже на ошибку обращения к памяти (синий экран смерти). Замечаю такую тенденцию, что в основном косяк происходит при нескольких MAV'ах.
Как думаете, может ли это быть связано с тем, что в корявом коде я обращаюсь на несуществующую ссылку в память, которая в своё время уже занята другим процессом - что приводит к краху системы?
__________________
|
(Offline)
|
|
15.01.2013, 10:50
|
#139
|
Разработчик
Регистрация: 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
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Советы по оптимизации
Объявление не моё, я просто разместил объяву
__________________
|
(Offline)
|
|
15.01.2013, 15:42
|
#141
|
Бывалый
Регистрация: 17.12.2011
Сообщений: 862
Написано 443 полезных сообщений (для 1,133 пользователей)
|
Ответ: Советы по оптимизации
HideEntity - EntityAlpha
Скрывает объект так, что он становится невидимым и больше не участвует в столкновения.
Основное применение - позволяет Вам создавать все объекты в начале программы, скрывать их, а затем копировать их и показывать по мере необходимости в основном игра. Это более эффективно, чем создание объектов в процессе игры.
Если Вы желаете скрыть объект так, чтобы он стал невидим, но все еще участвовал в столкновениях, то используйте команду EntityAlpha 0 вместо HideEntity. Это сделает объект полностью прозрачным.
HideEntity действует на указанный объект и все его дочерние(привязанные к нему) объекты, если такие существуют.
|
Как видим, две совершено разные функции, выполняющие разные задачи
что их и отличает!
То-есть на мой взгляд, тест с кубиками без учёта коллизии не пруф, давай по честному тесты проводить, а то получается что функция работает процентов на 50% а с учётом коллизии будет на все 100%
Я же могу скрывать объект для оптимизации, но не трогать коллизию
|
(Offline)
|
|
15.01.2013, 16:26
|
#142
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
Вот к примеру, я не пользуюсь коллизиями вообще, для это я пользуюсь физ движком.
И тест не для проверки коллизий, а что быстрее робит.
Да и вообще Хайд и Альфа я тестил только из интереса слов Джокера
Мудрость предыдущих поколений блитцеров гласит:
не используй HideEntity без крайней нужды ибо тормазит оно, используй EntityAlpha(0) вместо него, да ускорится программа твоя.
А Джокер услышал это от кого то...
Объявление не моё, я просто разместил объяву
|
|
|
Ну вот я решил и развеять легенду.
А суть теста вообще в другом. За место автоФейда удалять ентити. Короче надо будет, сам прочитаешь отчет
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
15.01.2013, 17:00
|
#143
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Советы по оптимизации
Щас попробовал написать такую функцию:
|
они внутри движка итак отрежутся по фрустуму.
попробуй на 1кк кубиков. и скомпиль оба ексешника пожалуйста, а то не у всех есть блиц, а потестить охота))
еще бы померить время самого скрытия с помощью альфы и хайдом. у меня в движке есть два варианта скрытия Hide / Show - которое удаляет ссылку на енити из сценграфа. оно работает долго, но зато скрытая таким образом ентити вообще никак не участвует в расчетах. так можно и миллион скрыть - и все равно ничего не изменится. и есть SetVisible - которое просто устанавливает флаг. Сам вызов SetVisible очень быстр, но скрытая таким образом ентити все равно участвует в расчетах (пусть и всего лишь проверка булевой переменной).
|
(Offline)
|
|
15.01.2013, 18:29
|
#144
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
и скомпиль оба ексешника пожалуйста, а то не у всех есть блиц
|
Да у меня тут инет тупой, на вахте. Завтра домой приеду, скомпилирую.
Ты чтооо??!?!? Какой миллион, у меня комп повис на 200к кубиков у меня комп реагировал со скоростью 1 кадр секунд 10...
Вообще тут тупой сценограф
Freeentity не освобождает ентити со сценографа. КАК ТАК!?!?!
При 100к ентити, скрываешь или удаляешь ентити, оперативка не высвобождается, проц также в напряге, и нормально становится только при 2 к кубиков.
А это фуфло! У меня в проекте уже вырастает 750 растений и 4000 плоских мешей для дебага скрытых, плюс парочках пост-эффектов с дополнительным рендером - фпс стабильное.
__________________
|
(Offline)
|
|
16.01.2013, 13:26
|
#145
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Советы по оптимизации
FreeEntity в блице должен удалять ентити и из сценграфа и из памяти. Т.е. это полное очищение)))
память по диспетчеру небось смотришь? там она может не сразу снизиться.
У меня в проекте уже вырастает 750 растений и 4000 плоских мешей для дебага скрытых, плюс парочках пост-эффектов с дополнительным рендером - фпс стабильное.
|
синглсюрфейс? у меня 4 кубиков на блице работает на 180 фпс на i7/2770K / 460GT.
|
(Offline)
|
|
16.01.2013, 23:30
|
#146
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
Сообщение от HolyDel
FreeEntity в блице должен удалять ентити и из сценграфа и из памяти. Т.е. это полное очищение)))
|
Да я прекрасно понимаю! ) Но и сам не понимаю как это может тормозить. Завтра выкину екзешники, посмотри плиз, исходники там же будут.
Сообщение от HolyDel
память по диспетчеру небось смотришь? там она может не сразу снизиться.
|
Да, по диспечеру, но ни сразу не потом ничего не меняется.
Хотя кубики копейки весят наверное, там то только мб пишет..
Сообщение от HolyDel
синглсюрфейс? у меня 4 кубиков на блице работает на 180 фпс на i7/2770K / 460GT.
|
Не понял что 4?? миллиона?
Ну извини, не сравнивай хайтэк с буком ))
__________________
|
(Offline)
|
|
17.01.2013, 01:52
|
#147
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Советы по оптимизации
4 тысячи.
|
(Offline)
|
|
17.01.2013, 11:12
|
#148
|
Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
Я знаю Холидел, что 4 к кубиков работает без проблем и у меня, но сють в другом, с твоим процом если вывести гдето 200к кубиков и скрыть 196 к кубиков, блитц будет тормозить..
__________________
|
(Offline)
|
|
24.01.2013, 22:47
|
#149
|
Разработчик
Регистрация: 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)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.01.2013, 23:17
|
#150
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,021
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Советы по оптимизации
Сообщение от burovalex
Извиняюсь, что на тему подзабил, выкидываю екзешник и исходник в спойлере.
Мой вывод был правильный, не создавайте геморой. Максимум что можно помудрить - это разбиение на секторы. И то, надо ли это... Вряд ли ктото будет делать Обливион или Фалаут )
Погоняйте пример, мне показалось что Хайд ентити чуть быстрее работает чем Альфа(0). Тестил в углу на 3к кубиках и Хайд выиграл на пару сотен кубиков )
|
ХайдЭнтити самое оно, остальное выдавало FPS от 1 до 16 максимум.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 14:15.
|