objekt rotieren und dann in entsprechende richtung weiterfahren lassen
-
max. 3 Tage
Bye, TGGC \-/
-
hm da steht ja drinn das die welt bewegt wird also das level häuser und so weiter ich will aber das die welt stehen bleibt und das objekt sich bewegt.
trotzdem danke.
@tggc was meinst du mit 3tage???
mfg
-
Ich glaube du hast das Prinzip des "Bewegens" in einer 3D-Umgebung noch nicht verstanden. Es wird immer die ganze Welt bewegt und nicht die Kamera bzw. der Bildschirm. Wenn du dein Auto jetzt bewegen willst, z.b. nach vorne, so verschiebtst du die Welt nach "hinten", also in diesem Fall näher an den Bildschirm. Korrigiert mich bitte, wenn ich mich irre.
Gruß Crabbe
-
hää
wenn ich jetzt aber z.b
if(taste w wird gedrückt) autoposition += D3DXVECTOR3(0.0f, 0.0f, 1.0f);wenn ich dann w drücke wird dann atomatich die welt bewegt?????????
mfg
-
FrauBolaIstDumm schrieb:
hm da steht ja drinn das die welt bewegt wird also das level häuser und so weiter ich will aber das die welt stehen bleibt und das objekt sich bewegt.
trotzdem danke.
@tggc was meinst du mit 3tage???
mfgWow, es waren nicht mal 2 Stunden! Respekt!
Bye, TGGC \-/
-
FrauBolaIstDumm schrieb:
hää
wenn ich jetzt aber z.b
if(taste w wird gedrückt) autoposition += D3DXVECTOR3(0.0f, 0.0f, 1.0f);wenn ich dann w drücke wird dann atomatich die welt bewegt?????????
mfgAlso ich kenne mich mit DirectX3D zwar überhauptnicht aus, aber ich vermute mal, dass wenn die Taste w gedrückt wird sich dein Auto nach vorne bewegen soll.
Und ich vermute auch, dass D3DXVECTOR3(0.0f, 0.0f, 1.0f) die Position der gezeichneten Objekte anzeigt. Der erste Parameter wäre dann der X-Wert, der zweite der Y-Wert und der dritte der Z-Wert. Da bei dir der Z-Wert(also der Tiefenwert) auf 1.0 steht heißt das, dass die Position der gezeichneten Objekte sich um den Wert 1.0 verschoben haben und zwar "aus dem Bilschirm hinaus" oder auch näher an den Bildschirm. Möchtest du die Objekte in den Bilschirm um 1.0 hineinbewegen, so gibst du statt 1.0 -1.0 an. Dann käme es dir aber so vor als würde sich dein Auto rückwärts bewegen.Gruß Crabbe
-
Lest Euch doch das Tutorial durch. Wenn es sein muss auch mehrmals, oder mal drüber schlafen. Am nächsten Tag ist es meistens einfacher drüber nachzudenken, weil sich ein paar Sachen dann schon 'gesetzt' haben.
-
Du bist schuld, hehe.
Bye, TGGC \-/
-
ich war vorhin blos verwirrt, wie ich mein auto auf den achsen bewegen kann weis ich , und ich hab mir auch das tut durchgelesen , und das ist ja eine kamera und genau so eine habe ich ja auch schon.
ich will aber das man das auto so bewegen kann wie die kamera.
wie geht das. ???????????????????????
Vielen Dank
MFG
-
ich versuchs kurz zu machen:
crabbe schrieb:
Ich glaube du hast das Prinzip des "Bewegens" in einer 3D-Umgebung noch nicht verstanden. Es wird immer die ganze Welt bewegt und nicht die Kamera bzw. der Bildschirm. Wenn du dein Auto jetzt bewegen willst, z.b. nach vorne, so verschiebtst du die Welt nach "hinten", also in diesem Fall näher an den Bildschirm. Korrigiert mich bitte, wenn ich mich irre.
hast du es denn verstanden? wahrscheinlich schon aber du hast es seltsam formuliert.
in einer 3d-szene gibt es normalerweise immer sowas wie objekte (autos, bäume,...) und eine kamera. wenn sich nun ein objekt bewegt, dann bewegt sich das objekt und nicht die kamera! wenn sich die kamera bewegt, dann bewegt sich die kamera und nicht das objekt. in directx gibt es dafür spezielle matritzen. eine für die objekte, eine für die kameraposition und eine für die kameraprojektion:
//setzt die matrix für das aktuelle objekt Device->SetTransform(D3DTS_WORLD,&matrix); //setzt die matrix für die aktuelle kameraposition Device->GraphicDevice->SetTransform(D3DTS_VIEW,&matrix) //setzt die matrix für die aktuelle kameraprojektion Device->SetTransform(D3DTS_PROJECTION,&matrix)
jedes objekt hat nun eine eigene transformationsmatrix, die das objekt "in die welt hineintransformiert", da jedes objekt zuerst einmal sein eigenes koordinatensystem hat. mit hilfe dieser matrix wird es dann in die welt "hinein" gesetzt. dabei ist wichtig zu wissen, das man verschiedene transformationen, wie z.b. rotationen, translationen oder skalierungen, hintereinanderausführen kann, bzw. "zusammenaddieren" kann, so das am schluss eine einzige "endtransformation" herauskommt. das ist in etwa dasd gleiche wie
x+(4+6-3+4) ist das selbe wie x+(11)
oder
objekt rotieren*skalieren*translieren ist das selbe wie objekt transformieren
das wird nun mit hilfe von matritzen und matritzenmultiplikation gemacht.
matrix.CreateIdentity
matrix.MultiplyWithRotationMatrix
matrix.MultiplyWithTranslationMatrixzuerst mal wird eine einheitsmatrix erstellt, die nichts macht, dann wird diese matrix mit einer matrix multipliziert, die eine rotation beschreibt, und dann wird die selbe matrix mit einer matrix multipliziert, die eine translation beschreibt, die endmatrix ist eine matrix, die beides gleichzeitig macht, und diese muss mann dann in directx als WORLD matrix setzen.
das selbe gilt für die kameraposition, nur das hier alles rückwärts gemacht wird. will man also die kamera um 10 einheiten nach vorne bewegen, dann muss man eine bewegung um 10 einheiten nach hinten machen (gleiches gilt für rotationen)
die kameraprojektion ist eigentlich egal, da sie normalerweise (ohne zoom) immer gleich ist. dafür gibt es standardfunktionen (CreateProjectionLH(),...).
in der directx 9 sdk doku steht das alles sehr ausführlich beschrieben...
wenn du nun dein auto genauso wie eine kamera bewegen willst, dann musst du eine matrix erzeugen, die entsprechenden transformationen miteinander multiplizieren und dann die "endmatrix" setzen. das gleiche für die kamera.
sorry für die schlechten formulierungen, aber habe gerade keine zeit für eine ausfürhliche und gute beschreibung.