Показать сообщение отдельно
Старый 27.10.2010, 23:38   #1064
DeeJex
Разработчик
 
Аватар для DeeJex
 
Регистрация: 24.02.2010
Адрес: Новороссийск
Сообщений: 485
Написано 112 полезных сообщений
(для 329 пользователей)
Ответ: Вопрос-Ответ (для новичков)

У меня такая проблема: гружу аним меш, ставлю ему EntityOrder -1, ничего не происходит, ставлю его чилдам рекурсивно это значение:
Function EntityOrderCh(ent,ord)
EntityOrder ent,ord
For i = 1 To CountChildren(ent)
tmp_ch = GetChild(ent,i)
EntityOrder tmp_ch,ord
If CountChildren(tmp_ch) Then EntityOrderCh tmp_ch,ord
Next
End Function
Но вот в чем проблема: чилды не пересекаются друг с другом, они тупо перекрывают друг друга. Что делать?
upd
Мда, в справке написано, что у кого order<>0, у того не работает z-буфферизация... мб есть какой-то выход?
upd2
Решил проблему вот как: разделил интити на слои, которые рендерятся по очереди (да, немного теряется производительность, но других вариантов нет)
Type TIOrder
Field ent,layer
Field hided
End Type

Function IOM(entity,layer=0) ;Запоминает интити
IOrder.TIOrder = New TIOrder
IOrder\ent = entity : IOrder\layer = layer
End Function

Function RenderWorldZ()
For IOrder.TIOrder = Each TIOrder
	IOrder\hided = BB_EntityHidden(IOrder\ent) ;ACHTUNG! Требуется библиотека blitz3d.dll, выкладывать не буду, ищите на 3dcom.3dn.ru
Next
For i = 0 To 1
For IOrder.TIOrder = Each TIOrder
	If IOrder\layer<>i Then HideEntity IOrder\ent
	If IOrder\layer=i And IOrder\hided=0 Then ShowEntity IOrder\ent
Next
RenderWorld
Next

For IOrder.TIOrder = Each TIOrder
If IOrder\hided = 1 Then HideEntity IOrder\ent Else ShowEntity IOrder\ent
Next

End Function
__________________
299 792 458

Последний раз редактировалось DeeJex, 28.10.2010 в 00:51.
(Offline)
 
Ответить с цитированием