Hat es schon jemand geschaft?

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Benibaerenstark

Betreff: Hat es schon jemand geschaft?

BeitragSa, Nov 19, 2005 0:24
Antworten mit Zitat
Benutzer-Profile anzeigen
...ein Bone-animiertes Modell in B3D in "echtzeit" zu beeinflussen?

was ich zum Beispiel meine:

user posted image


wobei bei den Beinen (blaue Joints) eine Laufanimation abspielt wird, die roten Joints steuerbar sind (Zielen, rauf-runter), und die schwarze Hülle aus einem Mesh, also aus einem Gittermodell besteht.

mfg

beni
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

SoNenTyp

BeitragSa, Nov 19, 2005 8:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weis jetzt nicht genau ob das was du willst geht, aber ich schätze schon.



Man könnte auber auch zwei Meshs (richtig geschrieben?) nehmen. Das unter Läuft und das obere Dreht sich einfach nur.
Gruss Der Typ.

User posted image

Benibaerenstark

BeitragSa, Nov 19, 2005 10:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, in professionellen spielen lässt sich die Spielfigur fast immer auf diese weise steuern. Die Frage ist, ob dies in Blitz3D überhaupt möglich ist. Oder kennt jemand B3D-Games, bei welchen dies verwirklicht wurde? Oder werden gar in professionellen Spielen zwei Meshes verwendet?

Das Problem bei der Verwendung von 2Meshes (oder mehr) ist doch, dass es nicht mehr eine Oberfläche ist, sondern dass Lücken entstehen...

mfg beni
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu
 

David

BeitragSa, Nov 19, 2005 10:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

SoNenTyp hat Folgendes geschrieben:
Ich weis jetzt nicht genau ob das was du willst geht, aber ich schätze schon.



Man könnte auber auch zwei Meshs (richtig geschrieben?) nehmen. Das unter Läuft und das obere Dreht sich einfach nur.


Diese Technik + Keyframe Animation ist sowas von alt... Quake3 hat sie noch verwendet.

@topic:
Bin mir nich sicher, aber ich glaube mal gehört zu haben das du die Joints als Entities ansprechen kannst...
Wenn dem so wäre müsstest du sie auch Rotieren und Verschieben können. Aber Achtung: nicht die Elternabhängigkeit vergessen! Wink

grüße
 

lettorTrepuS

BeitragSa, Nov 19, 2005 11:11
Antworten mit Zitat
Benutzer-Profile anzeigen
-aus Sicherheitsgründen gelöscht- Diese Information ist mit Ihrer Sicherheitsfreigabe leider nicht erhältlich, Bürger.

Benibaerenstark

BeitragSa, Nov 19, 2005 12:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Es stimmt, was david gesagt hat, man kann die Bones per Findchild suchen, kann auch ihre (globale) Position abfragen, aber wenn man sie versucht zu drehen/zu bewegen dann "zittert" der Bone immer zwischen der von mir erzwungenen Position und der Position, die er in der Animationskette eingenommen hat in und her.( ich hoffe ihr versteht was ich meine)

lösungsansätze?

mfg beni
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

Mr.Keks

BeitragSa, Nov 19, 2005 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn du das mesh animierst, keyframes für diese bones gesetzt sind und updateworld verwendest, dann wird deine veränderung beim updateworld in richtung des anstehenden keyframes wieder zur normalen animation zurückgezwungen...
MrKeks.net
 

Raitsun

BeitragSa, Nov 19, 2005 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
entsprechende Steuerbare Bones im Animationstool nicht animieren.
Oder aber du benutzt folgende Reihenfolge:

- animationen werden gespielt...
- updateworld
- steuerbare bones werden rotiert, bla...
- renderworld
Signatur? SIGNATUR?!
Signatur gibt es nicht!
Es hat nie eine Signatur gegeben!
Signatur ist eine LÜGE!

Benibaerenstark

BeitragSa, Nov 19, 2005 19:14
Antworten mit Zitat
Benutzer-Profile anzeigen
leider hat es keinen Einfluss, ob die Bones animert waren oder nicht, sie werden einfach an ihren Platz in der Gesamthirarchie gezwungen.

Dein zweiter Vorschlag ist eher erfolgsversprechend, werde ihn einmal testen...
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

skatanist

BeitragSa, Nov 19, 2005 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
ahoi,
sowas hab ich schonmal gemacht (und ich bin nicht grad der b3d profi).
ich habs so gelöst:
Beine als Laufani ganz normal im 3d prog animiert, und die auch so in b3d abgespielt. Soweit so gut. Dann die bones die für das Aurichten des Arms/Oberkörpers nötig sind rausgefischt, und "live" in Blitz bewegt (mit rotateentity). Musst da ein bisschn mit rumprobieren, damit zB der Oberkörper erst ab einem bestimten winkel gedreht wird, ansonsten nur schulter/arm...umso mehr arbeit du reinsteckst, umso besser siehts am ende aus.
Ist für mich die beste methode, und auch von laien verwirklichbar.

Fals jemand ne bessere methode für flexible Bonesanimationen kennt, bitte mitteilen. Danke. Smile

Benibaerenstark

BeitragSo, Nov 20, 2005 10:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit dem folgeden Modell und dem Code hat es geklappt. Das wichtige ist, dass die Bones erst nach dem Updateworld-Befehl gedreht werden.

Allerdings hat dies zur Folge, dass auch die Kollisionen vorher (bei Updateworld) überprüft werden und somit nicht mehr stimmen. ->Hat jemand einen Lösungsvorschlag?

Versuche mit dem 3ds Vormat haben nicht geklappt.->Lösungsvorschläge?

user posted image


Modell (In Milkshape erstellt, als b3d exportiert):

http://home.tiscalinet.ch/bene.../Linus.b3d


Code:

BlitzBasic: [AUSKLAPPEN]
Graphics3D 1024,768,32,1
SetBuffer BackBuffer()



Kamera=CreateCamera()
PositionEntity Kamera, 0,0,-150
RotateEntity Kamera,0,0,0
CameraZoom Kamera,2

Licht=CreateLight()
RotateEntity Licht,0,90,0

Linus=LoadAnimMesh(\"Linus.b3d\")
RotateEntity Linus,0,90,0
EntityAlpha Linus,0.5
Animate Linus,1,0.08

Center= FindChild (Linus,\"center\")
HuftL = FindChild (Linus,\"HuftL\")
FussL = FindChild (Linus,\"FussL\")
HuftR = FindChild (Linus,\"HuftR\")
FussR = FindChild (Linus,\"FussR\")
Bauch = FindChild (Linus,\"Bauch\")
Hals = FindChild (Linus,\"Hals\")


Global Kugel[7]
For cnt = 1 To 7
Kugel[cnt]=CreateSphere()
EntityColor Kugel[cnt],0,0,255
Next





While Not KeyHit(1)



PositionEntity Kugel[1],EntityX(Center,1),EntityY(Center,1),EntityZ(Center,1)
PositionEntity Kugel[2],EntityX(HuftL,1),EntityY(HuftL,1),EntityZ(HuftL,1)
PositionEntity Kugel[3],EntityX(FussL,1),EntityY(FussL,1),EntityZ(FussL,1)
PositionEntity Kugel[4],EntityX(HuftR,1),EntityY(HuftR,1),EntityZ(HuftR,1)
PositionEntity Kugel[5],EntityX(FussR,1),EntityY(FussR,1),EntityZ(FussR,1)
PositionEntity Kugel[6],EntityX(Bauch,1),EntityY(Bauch,1),EntityZ(Bauch,1)
PositionEntity Kugel[7],EntityX(Hals,1),EntityY(Hals,1),EntityZ(Hals,1)

TurnEntity Linus,0,1,0



UpdateWorld


If MouseHit (1) ;drehen beginnen mit Mausklicken
x1 = MouseX ()
y1 = MouseY ()
Pitch1 = EntityPitch(Bauch,1)
Yaw1 = EntityYaw(Bauch,1)

Rotationsmodus = 1
End If

If Rotationsmodus=1
If MouseDown(1) =0 ;drehen beenden wenn maus nicht mehr gedrückt
Rotationsmodus = 0

End If
EndIf

If Rotationsmodus=1

DeltaX=x1-MouseX()
DeltaY=y1-MouseY()

RotateEntity Bauch,Pitch1-DeltaY ,0,Yaw1+DeltaX

EndIf




RenderWorld



Flip
Wend

End
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu
  • Zuletzt bearbeitet von Benibaerenstark am So, Nov 20, 2005 14:36, insgesamt 3-mal bearbeitet
 

#Reaper

Newsposter

BeitragSo, Nov 20, 2005 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin!

Ich denke, dein code wäre schneller, wenn man die Kugeln als Perant der Bones setzten würde, dazu müsste man dann allerdings entweder die Schleife weglessen, und die Spheres gleich jedem Bone als Child zuteilen, (müsste doch gehen, oder?) oder die Bones in ein Dim-Feld stecken und dann halt nur per nummer aufrufen lassen...

Dann könnte man auch schonmal das Positionieren der einzelnen Kugeln weglassen Wink


MfG
#Reaper
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

Benibaerenstark

BeitragSo, Nov 20, 2005 14:23
Antworten mit Zitat
Benutzer-Profile anzeigen
keine Ahnung warum, aber das Parent-setzten funktioniert nicht. bzw die Kugeln werden nicht am richtigen Ort platziert. Aber diese Kugeln sind ja nur eine Visualisierung der Joints.
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu
  • Zuletzt bearbeitet von Benibaerenstark am So, Nov 20, 2005 14:31, insgesamt einmal bearbeitet
 

fliege

BeitragSo, Nov 20, 2005 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich glaub das auch b3d keien animierten 3ds objekte nimmt...ich hatte auch immer probleme damit

Fliege
Wer weiß was kommt.. ?

skatanist

BeitragSo, Nov 20, 2005 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
wegen kollisionen:
Polygon genaue Kollisionen gehen doch bei animierten .b3d Meshs grundsätzlich nicht (afaik).
aber du kannst doch den bones bestimmt einzelne "Kollisionskugeln" zuweisen, die sich dann mitdrehen (die bleiben ja auch nach UpdateWorld an der richtigen Stelle).
Nicht so genau, aber bestimmt besser als nur eine Kugel/Box für Kollisionen.

Oder hab ich das jetzt falsch verstanden?
 

Dreamora

BeitragSo, Nov 20, 2005 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Animationssupport:

3ds: Nur die Rotationen und Translationen von ganzen Objektgruppen / Meshes

x: 3ds + bone animation. Allerdings keine Vertexweights. Sprich eine Veränderung der bones in B3D hat keine Auswirkung auf das Mesh

b3D: x + Vertexweights. Dadurch könnt ihr Objekte in B3D selbst animieren. Sehr wichtig für physikalisch korrektes Verhalten bei Einschlägen, Stürzen etc


Kollision: Nur Box und Ellipse / Sphere kollision gibts bei animierten Modellen. Das liegt daran, dass die genauen Positionen der Vertices bei der Animation nicht bekannt sind (darum könnt ihr sie über die Befehle auch nicht herausfinden, ist kein normal mapping möglich etc) und die Kollision insofern auch nicht mit diesen gemacht werden kann.
Am einfachsten macht ihr einfach einen Kollisionsellipsoid oder Quader für jeden Bone also zb für OberArm, UnterArm, Hand, ...
Dann ist das auch bei B3D interner Animation kein Problem. Und es ist um Welten schneller als Polygonkollision mit vielen Polygonen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Benibaerenstark

BeitragSo, Nov 20, 2005 22:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe nur bedenken, da die Kollisionen ja mit dem Updateworld-Befehl überprüft werden. Wenn man auch schön für jeden Bone einen schönen Kollisionsquader platziert, werden die Kollisionen nicht richtig geprüft*, da die Bones ja erst nach der Kollisionsabfrage ( dem Updateworld-Befehl) in ihre Position gezwungen werden. Oder habe ich dies Falsch überlegt?


*es wird die Position geprüft, die es in der Animation hat(Aufrecht), wenn man aber diese Position nach dem Update-Befehl ändert (z.B. nach vorne beugen), dann wird dies nicht berücksichtigt. Oder?

würden in diesem Fall Collisions-dlls (Nuclear glory, Tokkamak) weiterhelfen?

mfg beni
3D Scanner selber bauen? -> www.bewe-3dscanner.ch.vu

skatanist

BeitragMo, Nov 21, 2005 1:19
Antworten mit Zitat
Benutzer-Profile anzeigen
hm...hab zuerst was anderes geschrieben, ist mir dann aber aufgefallen das es unlogisch ist Wink
Ich denke du hast mit deiner Vermutung recht.
Ein Nachteil beim UpdateWorld Befehl von Blitz3d ist halt, das es beides macht, Kollisionsprüfung und Animationsakualisierung.
Insofern würde natürlich eine Kollisons-dll Abhilfe schaffen, da dies ja mit einem anderen Befehl ausgeführt wird, den man ohne Probleme nach dem bewegen/drehen ausführen könnte.
Aber gerade durch Tokamak, verändert sich in Sachen Kollisionen fast alles im Gegensatz zu Blitz...

Trotzdem empfehle ich grundsätzlich eigentlich allen Tokamak zu benutzten...es ist frei, nich sooo schwer anzuwenden, und wertet Amateur Spiele mächtig auf (wenn man es benutzten kann). Und mit der beiliegenden Doku brauch man kein Tutorial.

MfG

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group