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

Спс Рандомайз, удобный код!

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

Так что надо находить и три противоположные стороны
Извиняюсь, за корявость написания, не знаю как здесь табуляцией пользоваться..
Global EntityBox_Right#, EntityBox_Left#, EntityBox_Top#, EntityBox_Bottom#, EntityBox_Front#, EntityBox_Back#

Function GetEntityBox(entity)
EntityBox_Right =    0
EntityBox_Left =     0
EntityBox_Top =     0
EntityBox_Bottom = 0
EntityBox_Front =   0
EntityBox_Back =    0

    	Local surf_count = CountSurfaces(entity)

	For surf_n = 0 To (surf_count - 1)

		Local surf = GetSurface(entity, surf_n)
			
		Local vert_count = CountVertices(surf)

		For vert_n = 0 To (vert_count-1)
			
EntityBox_Right =   Max(VertexX(surf, vert_n), EntityBox_Right)
EntityBox_Left =     Min(VertexX(surf, vert_n), EntityBox_Left)
EntityBox_Top =     Max(VertexY(surf, vert_n), EntityBox_Top)
EntityBox_Bottom = Min(VertexY(surf, vert_n), EntityBox_Bottom)
EntityBox_Front =   Max(VertexZ(surf, vert_n), EntityBox_Front)
EntityBox_Back =    Min(VertexZ(surf, vert_n), EntityBox_Back)

		Next
	Next
End Function
Function Max#(v1#, v2#)
    If v1 > v2 Then
       Return v1
    Else
       Return v2
    EndIF
End Function

Function Min#(v1#, v2#)
    If v1 > v2 Then
       Return v2
    Else
       Return v1
    EndIF
End Function
__________________
(Offline)
 
Ответить с цитированием