forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Blitz3D (http://forum.boolean.name/forumdisplay.php?f=45)
-   -   Разделение модели на части (http://forum.boolean.name/showthread.php?t=12419)

Amatsu 25.04.2010 21:00

Разделение модели на части
 
В общем, есть модель с костями, то есть при желании всю модель можно найти как группу Child'ов. Вопрос, можно ли как-нибудь "разбить" эту модель на эти чайлды, чтобы они стали самостоятельными объектами (чтобы над ними можно было проводить все операции как с обычным entity)? То есть, по сути, мне нужно чтобы модель разбивалась на полигональные группы (но не разлеталась пополигонно, этот трюк я знаю).
Если кто знает как реализовать подобное, отпишитесь плиз. Я конечно всегда могу сделать все части заранее моделями и держать из в памяти, в нужный момент подменяя цельный исходник, но сначала хотелось бы узнать, нельзя ли реализовать попроще?
Заранее спасибо!

EvilChaotic 25.04.2010 21:31

Ответ: Разделение модели на части
 
Ну, есть идея. Могу предложить череззадничный метод.
Если определенные части можно найти чилдами, то можно написать фунукцию, которая будет копировать геомтерию из сюрфейса в другой. ? Ну и естественно на месте старого чилда можно создать новый меш с сюрфейсом и вставить в него. Но я думаю этот способ не подойдет если использовать прямо в реалтайме...

Правда потом, как подтереть копируемый кусок геометрии в разделяемом меше я пока не знаю...
ClearSurface ?

Amatsu 25.04.2010 22:51

Ответ: Разделение модели на части
 
Да, я тоже думал об этом. Но в этом случае мне придется переделывать много моделей, так как разделение на сурфейсы предполагает наличие у моделей разных частей и текстур.
Сделал несколько кусков одной модели, загружаю их, добавляю им в физиксе физическую модель типа hull - проваливаются под землю. Типа слишком мелкие модели. А если я каждому куску каждой модели буду вручную колижнбокс прописывать... В общем даже не знаю как реализовать - предмет должен "разбиваться" и исчезать.

tormoz 25.04.2010 23:13

Ответ: Разделение модели на части
 
ПАРЕНТ 0

Amatsu 25.04.2010 23:20

Ответ: Разделение модели на части
 
Цитата:

Сообщение от tormoz (Сообщение 145483)
ПАРЕНТ 0

Пожалуйста, можно поподробнее? У меня никакой системы парентов на этих загружаемых моделях не используется... И потом у меня уже проблема из "как разбить модель на части" постепенно переросла в проблему "как сделать эти мелкие части физическими объектами". Дело в том что они достаточно тонкие, но длинные, чтобы я мог для них сделать точечную проверку для малых объектов/высоких скоростей.

EvilChaotic 25.04.2010 23:34

Ответ: Разделение модели на части
 
>ПАРЕНТ 0

Разве чилд можно открутить от аним меша?

ЗЫ. EntityParent ent,0 откручивает ентити от родителя.

tormoz 26.04.2010 01:02

Ответ: Разделение модели на части
 
Рекурсия по чилдам, записываешь их все в тип
потом цикл по типу и отпаренчиваешь

в первом цикле нельзя отпаренчивать - вылетит

Amatsu 26.04.2010 01:13

Ответ: Разделение модели на части
 
Спасибо за инфу, реально полезная штука, если получится реализовать. В данном случае уже отказался от разрушаемости по причине вышеописанных проблем с коллизией "тонких" тел в физиксе, но вообще пригодится =)

Amatsu 26.04.2010 11:59

Ответ: Разделение модели на части
 
Хм... отделил все чайлды от меша, но смысла в этом пока не увидел :) Отдельными entity после этого они не стали, многие команды по работе с ними так же продолжают ругаться, что мол "Entity is not a model", а команды по вращению/перемещению чайлдов работали и раньше. Даже кулбокс продолжает рассчитываться для каждого чайлда относительно оригинала.

Randomize 26.04.2010 12:41

Ответ: Разделение модели на части
 
Странно! На счёт EntityParent 0 было правильно сказано.
После этого чилд больше не имеет никакой связи с родителем.
И становится полноправным entity.
PHP код:

Function DeparentAllChilds(mesh)
    
Repeat
        
If CountChildren(mesh) = 0 Then Exit
        
DeparentAllChilds(GetChild(mesh,1))    
    
Forever 
    EntityParent mesh
,0    
End 
Function 


Amatsu 26.04.2010 12:58

Ответ: Разделение модели на части
 
Да, я так и делал. Хм... а как находить нужные чайлд - до разделения или каким-то образом после? Сделал так:

mesh=LoadAnimMesh(<...>)
child=FindChild(mesh,"child")
DeparentAllChilds(mesh)
EntityColor child,0,0,0

Результат такой же как я писал вышел - ругается ошибкой на EntityColor. А если переместить эти чайлды, так же кулбокс определяется относительно бывшего главного родителя...:dontknow:

Hurrit 26.04.2010 19:34

Ответ: Разделение модели на части
 
если я не ошибаюсь, то ошибка вполне понятна. ты ведь открутил уже все чайлды от меша, вот он и показывает на EntityColor. Попробуй так:
mesh=LoadAnimMesh(<...>)
child=FindChild(mesh,"child")
EntityColor child,0,0,0
DeparentAllChilds(mesh)

Конечно, 100 процентов не даю, но вроде бы должно работать

Amatsu 26.04.2010 19:51

Ответ: Разделение модели на части
 
Тоже самое :dontknow: Но вообще не парьтесь, я уже все равно делаю разбивание модели на полигоны аки партиклы ) Способ конечно устаревший, но все еще работает )


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

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