Finchild unerklärlicher offset

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Dottakopf

Betreff: Finchild unerklärlicher offset

BeitragSa, Dez 11, 2010 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Abend Blitzer!

ich bin gerade total stuzig, und mir ist mein Problem ein absolutes rätsel...
ich habe ein Model(Milkshape), dieses verfügt über Joints/Bones.

diese ermittle ich in bb über findchild(mesh,bonename). Er findet den Bone auch, nur ist dieser um ein paar units zu hoch, besser gesagt alle bones des Meshes sind um einen gleichen Offesetwert von ihrer eigentlichen Position verschoben.

So und jetzt wirds richtig lustig... Erstelle ich eine zweites test program mit exakt der gleichen lade und bone positonierungs routine ist alles richtig positioniert.

Ich habe auch schon mal ein 2tes model ausprobiert, nur das model geladen, den joint gesucht und über einen cube visuell dargestellt---> Wieder seltsam verschoben.

Hier der Code mit dem ich das Model lade und den Joint darstelle. In meinem aktuellen Projekt entsteht ein seltsamer offset, und in einem Testprogramm mit dem gleichen code passt alles. WFT ?

Code: [AUSKLAPPEN]

Msh_Tosch1 = LoadAnimMesh("entitys\tosch_body.b3d")
      RotateEntity Msh_Tosch1,0,-90,0
      ScaleMesh Msh_Tosch1, 0.5, 0.5, 0.5
      PositionEntity Msh_Tosch1,100,100,5
      HideEntity Msh_Tosch1

      bone=FindChild(Msh_Tosch1,"Joint_Body")
      c=CreateCube()
      ScaleEntity c,4,4,4
      PositionEntity c,EntityX(bone,1),EntityY(bone,1),EntityZ(bone,1)
      EntityParent c,bone



dem bild kann man recht gut entnehmen was ich genau meine:
links sind die Bones nach oben versetzt (auf dem Model Sichtbar durch den weißen cube)
rechts sind die Bones da wo sie sein sollten.. gleicher code, gleiches model....

-delete-

was kann das so beeinflussen. wie gesagt in mein aktuelles projekt habe ich bereits ein unabhängiges model geladen. Aus welchen ich nichts anderes mache als einfach nur die bones abzufragen, und sonst nichts weiter. Trotzdem sind die Bones verschoben.

Ich bin total ratlos....


~EDIT~
Warum auch immer... jetzt habe ich noch ein Testprogramm geschrieben mit diesem code. und hier geht es auch nicht mehr.
Habe bereits die Positionen und benennungen der joints in Milkshape überprüft.

Hier als lauffähige DL Version die das Problem zeigt. ( 39 kb)
-delete-


~EDIT 2~
Und hier geht es.. obwohl genau das gleiche model, und praktisch gleicher code.. das kann doch nicht sein
-delete-


Lade code für die Objekte(besser siehe hochgeladene dateien)
Code: [AUSKLAPPEN]



Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()


Global olo
Global cv
Global bonee




   ;robo Final
   olo = LoadAnimMesh("stickman1.b3d")

      ScaleMesh olo, 0.5, 0.5, 0.5
      MoveEntity olo,0,0,0
      ;HideEntity Msh_Tosch1
      EntityOrder olo,-1

      bonee=FindChild(olo,"body")
      cv=CreateCube()
      ScaleEntity cv,5,5,5
      PositionEntity cv,EntityX(bonee,1),EntityY(bonee,1),EntityZ(bonee,1)
      EntityParent cv,bonee




cam = CreateCamera()
MoveEntity cam,0,0,-100


Repeat
Cls


TurnEntity olo,0,1,0
PointEntity cam,olo

Rechtschreibfehler gelten der allgemeinen Belustigung!
  • Zuletzt bearbeitet von Dottakopf am So, Dez 12, 2010 15:23, insgesamt einmal bearbeitet

Johannes´

BeitragSa, Dez 11, 2010 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Das scheint mir doch am ScaleMesh zu liegen. Wenn das ScaleMesh durch ScaleEntity ersetzt wird, dann funktioniert folgender Code:
Code: [AUSKLAPPEN]
Graphics3D 800, 600, 32, 2
SetBuffer BackBuffer()


Global olo
Global cv
Global bonee




   ;robo Final
   olo = LoadAnimMesh("stick.b3d")

      ScaleEntity olo, 0.5, 0.5, 0.5
      MoveEntity olo,0,0,0
      ;HideEntity Msh_Tosch1


      bonee=FindChild(olo,"joint_body")
      cv=CreateCube()
      ScaleEntity cv,5,5,5
      PositionEntity cv,EntityX(bonee,1),EntityY(bonee,1),EntityZ(bonee,1)
      EntityParent cv,bonee
      EntityColor cv,255,0,0
      




cam = CreateCamera()
MoveEntity cam,0,0,-100


Repeat
Cls


TurnEntity olo,0,1,0
PointEntity cam,olo





UpdateWorld
RenderWorld

Flip
Until KeyHit(1)


Ich sehe gerade, in deinem funktionierenden Programm verwendest du ScaleEntity, also ist es auch nicht verwunderlich, dass es da tut.

Wie ist das eigentlich, wird mit ScaleMesh wirklich ausschließlich das eigentliche Gittermodell skaliert und der Rest nicht? (Die Bones gehören ja nicht wirklich dazu.)
  • Zuletzt bearbeitet von Johannes´ am Sa, Dez 11, 2010 23:29, insgesamt einmal bearbeitet

Dottakopf

BeitragSa, Dez 11, 2010 23:27
Antworten mit Zitat
Benutzer-Profile anzeigen
wahnsinn... du hast recht.
auf die scallierung habe ich nicht so geachtet, aber du hast recht Smile
Klingt jetzt im nachhinein logisch.

Danke !
Rechtschreibfehler gelten der allgemeinen Belustigung!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group