Тема: BoundingBox
Показать сообщение отдельно
Старый 12.01.2013, 01:16   #3
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,373
Написано 2,478 полезных сообщений
(для 6,866 пользователей)
Сообщение Ответ: BoundingBox

Сообщение от Кирпи4 Посмотреть сообщение
Блин, мужики, выручите по-братски...
Всю голову сломал, надо построить бокс вокруг меша неопределенной формы (то бишь пересчет позиций всех вертексов необходим).
Что то вот код понадобился, а написать не выходит...
Нечто вроде:
Global EntityBox_Width#, EntityBox_Height#, EntityBox_Depth#

Function GetEntityBox(entity)
    	EntityBox_Width = 0
    	EntityBox_Height = 0
    	EntityBox_Depth = 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_Width = Max(VertexX(surf, vert_n), EntityBox_Width)
			EntityBox_Height = Max(VertexY(surf, vert_n), EntityBox_Height)
			EntityBox_Depth = Max(VertexZ(surf, vert_n), EntityBox_Depth)
		Next
	Next
End Function
Function Max#(v1#, v2#)
    If v1 > v2 Then
       Return v1
    Else
       Return v2
    EndIF
End Function
Писал прямо тут. Исправить ошибки, думаю, не трудно.
Там может быть косяк с CountSurfaces
Если у тебя AnimMesh то нужно обернуть это ещё в рекурсию и бежать по чайлдам.
И да, не злоупотребляй в цикле. Перебор - довольно ресурсоёмкая операция.
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
burovalex (14.01.2013)