forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Глюк с анимацией после Fitmesh entity... (http://forum.boolean.name/showthread.php?t=12999)

Alex_Noc 25.07.2010 15:49

Глюк с анимацией после Fitmesh entity...
 
Есть такая проблема - гружу модели автоматом из папки , гружу как аниммеши, анимацию играю просто animateentity entity.
Возникла проблема - объект "взрывается" после использования команды фит меш, ставил после фитмеша resetentity - проблема осталась.
Кто нибудь сталкивался с похожей проблемой - если есть решение подскажите.
Спасибо!;)

Ganociy 25.07.2010 16:00

Ответ: Глюк с анимацией после Fitmesh entity...
 
а ты убери команду fitmesh

DeeJex 25.07.2010 16:02

Ответ: Глюк с анимацией после Fitmesh entity...
 
когда из макса экспортишь модели, применяй resetxform.

Alex_Noc 26.07.2010 03:32

Ответ: Глюк с анимацией после Fitmesh entity...
 
Цитата:

Сообщение от Ganociy (Сообщение 156119)
а ты убери команду fitmesh

какой ты умный однако - ЕСЛИ ОНА У МЕНЯ В КОДЕ ПРИСУТСТВУЕТ ЗНАЧИТ МНЕ ТАК НАДО!!!

Alex_Noc 26.07.2010 03:32

Ответ: Глюк с анимацией после Fitmesh entity...
 
Цитата:

Сообщение от DeeJex (Сообщение 156120)
когда из макса экспортишь модели, применяй resetxform.

все это сделано, но баг есть

ARA 26.07.2010 03:42

Ответ: Глюк с анимацией после Fitmesh entity...
 
Цитата:

Сообщение от Alex_Noc (Сообщение 156177)
все это сделано

Значит плохо сделано. Сталкивался с тем, что резет не всегда срабатывал. Теперь я для верности делаю так с персонажами:
1) Применяю резетхформ, причём жму дофига раз для верности :-D
2) Конверт ту эдитабл поли
3) Пивот Center to object
И только потом уже Скиню.

tormoz 26.07.2010 06:20

Ответ: Глюк с анимацией после Fitmesh entity...
 
Писец
полное непонимание основ анимации

я снес несущую стенку, а крыша упала на голову
почему ?

отцентруй модель в максе
потом привяжи кости
анимируй
экспорти

и никаких операций с мешем в блитце, если не хочешь крышу на голову

Alex_Noc 26.07.2010 14:26

Ответ: Глюк с анимацией после Fitmesh entity...
 
Цитата:

Сообщение от ARENSHI (Сообщение 156179)
Значит плохо сделано. Сталкивался с тем, что резет не всегда срабатывал. Теперь я для верности делаю так с персонажами:
1) Применяю резетхформ, причём жму дофига раз для верности :-D
2) Конверт ту эдитабл поли
3) Пивот Center to object
И только потом уже Скиню.

Научу неучей (11 лет работы в максе мой опыт, и 6 лет работы аниматором)
Чтоб по тыщу раз не тыкать для "верности" --> Xform
Ткни для проверки правой кнопкой на кнопке трансформации и ротации - Xform можно проверить в том окошечке что у тебя вылезет - все должно быть по 0.
Либо если тебе не нравиться пользоваться инструментом Xform - то в панели иерархии есть резет трансформации и ротации.
Ну мучай больше кнопки компа и свои пальцы!!!
А главное не думай что ты самый умный , а те кто задал вопрос на форуме нубы!!!
Я просто так вопросов не задаю!
Есть проблема - есть вопрос.:-D

Alex_Noc 26.07.2010 14:32

Ответ: Глюк с анимацией после Fitmesh entity...
 
Цитата:

Сообщение от tormoz (Сообщение 156181)
Писец
полное непонимание основ анимации

я снес несущую стенку, а крыша упала на голову
почему ?

отцентруй модель в максе
потом привяжи кости
анимируй
экспорти

и никаких операций с мешем в блитце, если не хочешь крышу на голову

Ответ выше частично касается и твоего ответа.
Ты попробуй сам - прежде чем ответить.
Я просил ответ у того кто сталкивался с похожей проблемой, а не начинать тут флудить не по теме собирая благодарности от еще более незнающих людей.
Модель стоит строго в - 0,0,0
Xform-ом пользоваться умею поверь уж, к костям как ты понял также умею привязывать, анимировать также умею (пост выше), а уж экспортить поверь знаю как если все же анимация играется в блице, и сама модель присутствует.
Вопрос остается актуальным. ;)

Knightmare 26.07.2010 15:23

Ответ: Глюк с анимацией после Fitmesh entity...
 
Если моделлер намоделил так, что в коде приходится устраивать пляски с бубном вокруг модели - избить этого моделлера бейсбольной битой до полусмерти, чтобы больше так не делал (суровая правда геймдева).
Для упоротых, ищущих ответы на идиотские вопросы - никак, блитз не делает преобразование иерархии костей при таких шаманствах.
А главное не думай что ты самый умный , а те кто ответил на твой вопрос на форуме нубы!!! (с) Я типа имел несчастье изучать исходники блитза и знаю о чем говорю.

ARA 26.07.2010 16:29

Ответ: Глюк с анимацией после Fitmesh entity...
 
Цитата:

Сообщение от Alex_Noc (Сообщение 156206)
Научу неучей

Мде? Только почему-то у неучей (вроде меня) всё работает баз шаманства в блице :) 5 лет тыканья в максе и мучанья пальцев меня кое чему научили видимо.

Alex_Noc 26.07.2010 18:28

Ответ: Глюк с анимацией после Fitmesh entity...
 
Во первых сам все и моделю и анимю и прогаю, так что ошибки в этих аспектах исключены.
Нуа шаманства мне всеже нужны раз: для экономии ресурсов(дабы заюзать несколько элементов по разному)
второе: Arenshi <-- видимо хреново научили , если тычешь по многу раз для одной операции. Подучись лучше из того что я тебе написал - а не начинай выкаблучиваться - дело говорю!
И если нету ответа на мой вопрос - то ненужно ничего писать.

tormoz 26.07.2010 18:56

Ответ: Глюк с анимацией после Fitmesh entity...
 
Для особо упоротых: применять любые операции с мешем для анимированных моделей нельзя

читать до просветления

ABTOMAT 26.07.2010 20:12

Ответ: Глюк с анимацией после Fitmesh entity...
 
Тут был феерический срач, суть такова:
1. *Mesh-функции не трансформируют иерархию объектов, поэтому приводят к непредсказуемым последствиям при работе с анимацией.
2. *Entity-функции трансформируют всё вместе, поэтому глюков с анимацией не дают.
3. Аналога функции FitMesh среди *Entity-функций нету, так что в случае с анимированной моделью придётся искать обходные пути.

Не хотел вмешиваться, но прерванная дискуссия уже вполне могла спровоцировать бан каким-нибудь менее лояльным модератором.
Давайте жить дружно!

Randomize 06.08.2010 03:58

Ответ: Глюк с анимацией после Fitmesh entity...
 
Да факин щет! Всем -1!

FitMesh - Масштабирует и перемещает все вершины сетки объекта так, чтобы она вписалась в указанные размеры.

Ну чтож. Значит надо написать аналог самому.
Для этого нужно узнать Размеры аним меша.
После этого нужный_размер поделить на размер_аним_меша и вычислить фактор скейла по каждой из осей.

Moka в своё время писал:
PHP код:

Function AnimMeshWidth#(Mesh)
    
    
Local MinW#=999999,MaxW#=-999999
    
Local VertX#
    
Local ChildCnt%,SurfCnt%,VertCnt%
    
    
ChildCnt=CountChildren(Mesh)
    For 
n1=1 To ChildCnt
        Child
=GetChild(Mesh,n1)
        
SurfCnt=CountSurfaces(Child)
        For 
n2=1 To SurfCnt
            Surf
=GetSurface(Child,n2)
            
VertCnt=CountVertices(Surf)
            For 
n3=0 To VertCnt-1
                VertX
=VertexX(Surf,n3)
                If 
VertX>MaxW MaxW=VertX
                
If VertX<MinW MinW=VertX
            Next
        Next
    Next
    
    
Return Abs(MaxW-MinW)
    
End Function

Function 
AnimMeshHeight#(Mesh)
    
    
Local MinH#=999999,MaxH#=-999999
    
Local VertY#
    
Local ChildCnt%,SurfCnt%,VertCnt%
    
    
ChildCnt=CountChildren(Mesh)
    For 
n1=1 To ChildCnt
        Child
=GetChild(Mesh,n1)
        
SurfCnt=CountSurfaces(Child)
        For 
n2=1 To SurfCnt
            Surf
=GetSurface(Child,n2)
            
VertCnt=CountVertices(Surf)
            For 
n3=0 To VertCnt-1
                VertY
=VertexY(Surf,n3)
                If 
VertY>MaxH MaxH=VertY
                
If VertY<MinH MinH=VertY
            Next
        Next
    Next
    
    
Return Abs(MaxH-MinH)
    
End Function

Function 
AnimMeshDepth#(Mesh)
    
    
Local MinD#=999999,MaxD#=-999999
    
Local VertZ#
    
Local ChildCnt%,SurfCnt%,VertCnt%
    
    
ChildCnt=CountChildren(Mesh)
    For 
n1=1 To ChildCnt
        Child
=GetChild(Mesh,n1)
        
SurfCnt=CountSurfaces(Child)
        For 
n2=1 To SurfCnt
            Surf
=GetSurface(Child,n2)
            
VertCnt=CountVertices(Surf)
            For 
n3=0 To VertCnt-1
                VertZ
=VertexZ(Surf,n3)
                If 
VertZ>MaxD MaxD=VertZ
                
If VertZ<MinD MinD=VertZ
            Next
        Next
    Next
    
    
Return Abs(MaxD-MinD)
    
End Function


Function 
MeshCenterX#(Mesh)
    
    
Local MinW#=999999,MaxW#=-999999
    
Local ChildCnt%,SurfCnt%,VertCnt%
    
Local Count%,Ans#
    
    
ChildCnt=CountChildren(Mesh)
    For 
n1=1 To ChildCnt
        Child
=GetChild(Mesh,n1)
        
SurfCnt=CountSurfaces(Child)
        For 
n2=1 To SurfCnt
            Surf
=GetSurface(Child,n2)
            
VertCnt=CountVertices(Surf)
            For 
n3=0 To VertCnt-1
                Count
=Count+1
                Ans
=Ans+VertexX(Surf,n3)
            
Next
        Next
    Next
    
    
Return (Ans/Count)
    
End Function

Function 
MeshCenterY#(Mesh)
    
    
Local MinH#=999999,MaxH#=-999999
    
Local ChildCnt%,SurfCnt%,VertCnt%
    
Local Count%,Ans#
    
    
ChildCnt=CountChildren(Mesh)
    For 
n1=1 To ChildCnt
        Child
=GetChild(Mesh,n1)
        
SurfCnt=CountSurfaces(Child)
        For 
n2=1 To SurfCnt
            Surf
=GetSurface(Child,n2)
            
VertCnt=CountVertices(Surf)
            For 
n3=0 To VertCnt-1
                Count
=Count+1
                Ans
=Ans+VertexY(Surf,n3)
            
Next
        Next
    Next
    
    
Return (Ans/Count)
    
End Function

Function 
MeshCenterZ#(Mesh)
    
    
Local MinD#=999999,MaxD#=-999999
    
Local ChildCnt%,SurfCnt%,VertCnt%
    
Local Count%,Ans#
    
    
ChildCnt=CountChildren(Mesh)
    For 
n1=1 To ChildCnt
        Child
=GetChild(Mesh,n1)
        
SurfCnt=CountSurfaces(Child)
        For 
n2=1 To SurfCnt
            Surf
=GetSurface(Child,n2)
            
VertCnt=CountVertices(Surf)
            For 
n3=0 To VertCnt-1
                Count
=Count+1
                Ans
=Ans+VertexZ(Surf,n3)
            
Next
        Next
    Next
    
    
Return (Ans/Count)
    
End Function 


Теперь вычислив факторы можно скейлить.

PHP код:

Function ResizeAnimMesh(Entity,width#,height#,depth#,proporcional=0)
    
If EntityClass(Entity)="Mesh"
        
mw#=AnimMeshWidth(Entity)
        
mh#=AnimMeshWidth(Entity)
        
md#=AnimMeshWidth(Entity)

        
ScaleEntityEntitywidth/mwheight/mhdepth/md)
    EndIf
End Function 

* естественно без ResetXForm нормально работать не будет

И чо я самый умный чтоли? Не верю!


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

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