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=17312)

Arton 03.01.2013 21:23

Ответ: Скрытие объектов за стенами
 
Я вообще вот таким пользовался.

Vobj2# - объект который надо скрывать
Cply2# - объект который "видит", например камера

Код:

Function ViziblObj2(Vobj2#,Cply2#,VcamRast#,Vrast2#)
;Плавное скрытее объекта, на расстояние или вне зоны камеры.
;EntityAutoFade Vobj2#,VcamRast#,Vrast2#
If EntityDistance(Cply2#,Vobj2#) > Vrast2# Or EntityInView(Vobj2#,Cply2#) = False Then HideEntity Vobj2# : Else ShowEntity Vobj2#

End Function

У меня вопрос. Этот код эффективен? Мне он помогал, но может быть он тормозной слишком?

Черный крыс 03.01.2013 21:36

Ответ: Скрытие объектов за стенами
 
Эффективен, если Vobj2 - является порталом.

В остальных случаях - нет.

Arton 03.01.2013 21:38

Ответ: Скрытие объектов за стенами
 
Цитата:

Сообщение от Diablo1909 (Сообщение 248215)
Эффективен, если Vobj2 - является порталом.

В остальных случаях - нет.

Порталом? Не понял? Поясни.

Но ведь разгрузка на полигоны в кадре есть.
Неужели этот код настолько неэффективен?

Wegox 05.01.2013 02:12

Ответ: Скрытие объектов за стенами
 
Цитата:

Сообщение от Arton (Сообщение 248216)
Порталом? Не понял? Поясни.

Но ведь разгрузка на полигоны в кадре есть.
Неужели этот код настолько неэффективен?

А что!? не портал что-ли :-)
Код:

Function OccludeEntity(CurrentEntity.Entity,Camera)
; Now check if object is occluded or not...

If CurrentEntity\Occluded=False Then ; If entity already is occluded, then skip this...

For OccludeList.Occluder = Each Occluder
; Skip the occluder if it's out of the viewfrustum
If EntityInView(OccludeList\Mesh,Camera)=False Then Goto SkipThisOccluder
EntityHidden=True
For EdgeList.Edge = Each Edge
If OccludeList\ID = EdgeList\Parent Then
If EdgeList\Visible=True Then
If  ((EdgeList\PlaneNX#*EntityX#(CurrentEntity\Entity)+EdgeList\PlaneNY#*EntityY#(CurrentEntity\Entity)+EdgeList\PlaneNZ#*EntityZ#(CurrentEntity\Entity))-EdgeList\PlaneDist#+EntityList\Radius#)>-CurrentEntity\Radius#  Then
EntityHidden=False
EndIf
EndIf
EndIf
Next

If EntityHidden=True Then
CurrentEntity\Occluded=True
;EntityColor EntityList\Entity,255,0,0
ShowEntity CurrentEntity\Entity

Exit
Else
CurrentEntity\Occluded=False
HideEntity CurrentEntity\Entity

EndIf
.SkipThisOccluder
Next

EndIf
End Function


Arton 05.01.2013 05:18

Ответ: Скрытие объектов за стенами
 
Wegox, твой код чего то не захотел работать, не в цикле, не так. Дебагер ругается "ерор тайп" Разбираться не хочется, да и программист из меня фиговый :-)

P. S. Нда, понаписал тут вопросов, а оказывается на первой странице объяснения есть...

Цитата:

Сообщение от Diablo1909 (Сообщение 248215)
Эффективен, если Vobj2 - является порталом.

В остальных случаях - нет.

А если к примеру куча деревьев, целый лес, 1000 штук, мой код эффективен? Полигоны то разгружает, но вот что насчёт скорости?


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

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