+Hirachie von nem AnimMesh als Linien zeigen (erledigt)

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Markus2

Betreff: +Hirachie von nem AnimMesh als Linien zeigen (erledigt)

BeitragDi, Jul 27, 2004 22:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich wollte mal nen Animator in BB versuchen ,
einfacher gehts ja nicht , dann brauche ich mir
nicht CharakterFX zu besorgen und das original Mesh
bleibt unverändert und erzeuge einfach anhand einer
von mir gespeicherten Datei die Animation nach dem
laden von LoadAnimMesh(...) und fertig 8)

EDIT
...

so siehts jetzt aus Smile
user posted image

...
  • Zuletzt bearbeitet von Markus2 am Mi, Jul 28, 2004 18:41, insgesamt 2-mal bearbeitet
 

INpac

BeitragDi, Jul 27, 2004 23:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi.

In unserem Editor gibts Waypoints, die ich mit 3D-Lines verbinde:
Dabei werden 3 vertcies zu einem Triangle verbunden, allerdings 2 vertices an der gleichen position.
Im Wireframe-Modus gerendert ergibt das dann eine Linie, die sich sich viel schneller berechnen lässt als eine mit Line()
Zusätzlch kannste über Vertexcolor dann coole Effekte der Linie geben..

aber was red ich hier, zum Thema!
Erstelle von jedem parent zum dessen children eine 3d-line... den rest macht dir dann blitz3d. Wenn du die position einer linie ändern musst, hab ich es so gemacht, dass alle vertcies durchgegangen werden und wenn die ein vertex die position hat, die neu gesetzt werden soll, wird er auf die neuen koords gesetzt.

ich verwirre wohl nur..

Markus2

BeitragMi, Jul 28, 2004 0:16
Antworten mit Zitat
Benutzer-Profile anzeigen
INpac hat Folgendes geschrieben:
...
Erstelle von jedem parent zum dessen children eine 3d-line...


Hi,
ne soweit war ich ja auch schon und wunder mich ja selber das
es nicht geht bzw. falsch dargestellt wird Confused
Irgendwas mache ich wohl in der rekursiven Funk. falsch .

Das Linien nicht der renner sind ist egal und wenn man was
bewegt müßte ich ja alle Triangles (als Linien) neu machen .

Diese Figur müßte so 18 Linien haben !?
Spielt so keine große Rolle aber mich nervt das so Sad

Mit 3D Waypoints hatte ich letztens selber was gemacht und
diese auch als Linien dargestellt und da hatte ich keine Prob. ... komisch
 

walski

Ehemaliger Admin

BeitragMi, Jul 28, 2004 2:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, ist es nicht recht logisch, dass er das macht, was er macht?

Kurz Analyse:

Code: [AUSKLAPPEN]


Function AnimShowHirachie(e,c=0)
...
For i=1 To CountChildren(e)
  c=GetChild(e,i)
  AnimShowHirachie(c,e,i,CountChildren(e))
Next
..


Also, du gehst bei jedem Entity (e) das du übergibst, alle Childrens durch und dann übergibst du die gefundenen Childrens als neue Parent-Entity und die eigentliche Parent-Entity als Child!
Denn die Parameter sind ja in der Reihenfolge: Parent,Child
Du übergibst sie aber in der Rekursion genau andersrum. Ok, das wird sicher seinen Sinn haben, denn wenn man es umdreht, dann geht es nicht. Wink

Nun aber weiter in der Analyse:

Du fängst also mit der "Root" Entity an.
Diese hat 6 Childs, und das erste Child ist "Figur".
Du rufst also die Funktion erneut auf mit e="Figur" und c="Root"

danach errechnest du als x1 und y1 die 2D-Koordinaten der abgebildeten Entity "Figur" und als x2 und y2 die 2D-Koordinaten der abgebildeten Entity "Root".

Danach zeichnest du eine Linie zwischen beiden Smile

Genau das gleiche machst du eben auch noch mit den restlichen 5 direkten Childs von "Root".

Ich hab dein Programm wirklich nicht ganz verstanden, aber mit einem dreckigen:

Code: [AUSKLAPPEN]

 e = EntityFindByName(e,"Figur")


vor dem "AnimShowHirachie"-Aufruf in der Hauptschleife löst sich dein Problem in Lust auf. Ich habe auf die schnelle keine akurate Lösung für:

Code: [AUSKLAPPEN]

e = "1tes Child des Root-Entitys"


gefunden, also hab ich das mal so gelöst Smile

Ich hoffe ich konnte mit meinem Beitrag wenigstens etwas helfen dem Problem auf die Schliche zu kommen Smile

Das ganze lässt sich irgendwie ganz gut debuggen wenn man sich eine Hierachische Ansicht der Rekursion erstellt.
Dazu habe ich folgendes gemacht:

1. Global dSpace

2. Funktion space:
Code: [AUSKLAPPEN]

Function space$(i)

Local j
Local tString$ = ""

For j=1 To i

    tString$ = tString$ + " "
   
Next
Return tString$

End function


3. In die Funktion "AnimShowHirachie":

3.1 Nach der Berechnung von x2 und y2:
Code: [AUSKLAPPEN]

  If x2=320 And y2=184 then

     DebugLog space(dSpace) + "o> " + EntityName(e) + "/" + EntityName(c) + " " + u + ":" + v

  EndIf

(320 und 184 sind natürlich nur richtig wenn vorher nix bewegt wurde Smile )

3.2 Die Schleife der "Childrens" wie folgt abändern:

Code: [AUSKLAPPEN]

DebugLog space(dSpace) + "-> " + EntityName(e)

For i=1 To CountChildren(e)
  c=GetChild(e,i)
  dSpace = dSpace + 3
  AnimShowHirachie(c,e,i,CountChildren(e))
  dSpace = dSpace - 3
Next


4. Vor den Aufruf von "AnimShowHirachie" in der Hauptschleife ein:

Code: [AUSKLAPPEN]

DebugLog "-----------------------"


einfügen.

5. Programm im Debug-Modus starten und nach einer Weile einfach stoppen.
Bei der Einsicht des Debuglogs sollte man sich nun einen kompletten Block zwischen zwei Trennstrichen hernehmen und naja, man kann so zumindest sehen, wann genau die "falschen" Linien gezeichnet werden, nämlich bei jedem "o>". Das "o>" gehört dabei jeweils zu dem darüberstehenden "->".

Ok, nun aber wirklich genug, und ich hoffe das war nicht alles schon löngst klar, nur klein walski war wieder zu doof dafür Wink

walski
buh!

Markus2

BeitragMi, Jul 28, 2004 18:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@Walski
Jo, danke für deine Mühe ,
mit e = EntityFindByName(e,"Figur") geht es in der Tat .
Dieses Root Entity erzeugt BB auch selber und darum habe ich
dem auch nen Namen gegeben .
Warum dadurch die Darstellung falsch wird ist mir noch nicht ganz klar
aber jetzt weiß ich ja woran es liegt .
Jetzt kann ich die AnimShowHirachie Funk. auch wieder
umstricken das sie jeder verstehen würde Wink
So hatte ich es vorher und so gehts auch mit deinem Trick dazu 8)
Wie es jetzt aus sieht , siehste oben ...

Code: [AUSKLAPPEN]

Function AnimShowHirachie(e)

 Local x1,y1
 Local x2,y2
 Local i

 If e=0 Then Return

 CameraProject cam,EntityX(e,True),EntityY(e,True),EntityZ(e,True)
 x1=ProjectedX()
 y1=ProjectedY()

 For i=1 To CountChildren(e)
  c=GetChild(e,i)
  CameraProject cam,EntityX(c,True),EntityY(c,True),EntityZ(c,True)
  x2=ProjectedX()
  y2=ProjectedY()
  mLineClip x1,y1,x2,y2
  AnimShowHirachie(c)
 Next
 
End Function



EDIT

Habe gerade heraus gefunden das durch die inverse Kinematik
in C4D die Objekte alle doppelt sind , also wie als Pivots werden
die exportiert Confused
Macht aber nix , will ja eh selber animieren 8)
 

walski

Ehemaliger Admin

BeitragMi, Jul 28, 2004 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Smile Jetzt wo es geht bin ich, wie immer bei dir, sehr auf das Endergebnis gespannt!

walski
buh!

Markus2

BeitragMi, Jul 28, 2004 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo ,mal sehen ,
was ich z.B. immer vermißt habe sind zwei Gelenke zu vertauschen
mit der Hirachie die da drunter ist wie z.B. Linkes Bein mit Rechtes Bein
weil ja vieles gegenläufig ist und das kann man in BB ja easy umsetzen Smile
Stricke mir gerade nen mini GUI ...

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group