Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

1

12.08.2004, 23:52

Objekt verfolgen!

Hallo!

Nach langem herumprobieren, versuch ich es doch hier um eine Lösung zu finden!
Ein Würfel, stellt meinen Spieler da, man kann ihn mit den Pfeiltasten(links und rechts) drehen und ihn mit den anderen Pfeiltasten fortbewegen, genau in diese Richtung in die er zeigt! Sollte ungefähr so sein, wie bei den 3rd Person Spiele, wo die Kamera den Spieler auch immer von hinten verfolgt!
Also hier mal der Code zu fortbewegung des Spielers:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
if(GetAsyncKeyState(VK_LEFT))
        Richtung -= TB_DEG_TO_RAD(45.0f) * fNumSecsPassed ;
        
    if(GetAsyncKeyState(VK_RIGHT))
        Richtung += TB_DEG_TO_RAD(45.0f) * fNumSecsPassed;
    
    tbVector3 vSpielerDirection = tbVector3(sinf(Richtung),
                                            0.0f,
                                            cosf(Richtung));

    if(GetAsyncKeyState(VK_UP)) 
       SpielerPosition += vSpielerDirection * 15.0f * fNumSecsPassed;
        
    if(GetAsyncKeyState(VK_DOWN)) 
         SpielerPosition -= vSpielerDirection * 15.0f * fNumSecsPassed;

///////////////////////

//////////////////////

//Hier wird die Position des Spielers verändert, vor dem Rendern

  mRotation = tbMatrixRotationY((Richtung)); 
   mRotationX = tbMatrixRotationX(TB_DEG_TO_RAD(0.0f*g_fTime)); 
   mTranslation = tbMatrixTranslation(SpielerPosition); 
        
    // Beide Matrizen kombinieren und als Weltmatrix einsetzen 

    mWorld = mRotation * mRotationX*mTranslation; 
     tbDirect3D::GetDevice()->SetTransform(D3DTS_WORLD, (D3DMATRIX*)(&mWorld)); 


Also das funktioniert noch alles bestens, aber wie erzeuge ich mit Hilfe dieser Angaben eine Kamera, die ihn immer schön von hinten verfolgt!

Also so siehts bei mir bis jetzt aus:

C-/C++-Quelltext

1
2
3
mCamera = tbMatrixCamera(SpielerPosition -tbVector3(0.0f,0.0f,2.0f), 
                             SpielerPosition +vSpeilerDirection, 
                             tbVector3(0.0f, 1.0f, 0.0f));


Aber das Funktioneirt leider gar nicht, da sich so die Kamera nicht mitdreht!
Weiß jemand wie ich die Parameter richtig setzten muss? wäre super, danke schon mal :) !


cya,
Stefan

adapto

Treue Seele

Beiträge: 147

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

2

13.08.2004, 01:28

C-/C++-Quelltext

1
TB_DEG_TO_RAD(0.0f*g_fTime)


hab mir deinen code nicht so genau angeschaut, aber das hier kann nicht stimmen.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

3

13.08.2004, 10:16

C-/C++-Quelltext

1
2
3
tbMatrixCamera(SpielerPosition -tbVector3(0.0f,0.0f,2.0f), 
                             SpielerPosition +vSpeilerDirection, 
                             tbVector3(0.0f, 1.0f, 0.0f));

Die 2. Ziele so ne richtung angeben, daher ist meines das "SpielerPosition"
fehl am platze.

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

4

13.08.2004, 11:50

Zitat von »"adapto"«

C-/C++-Quelltext

1
TB_DEG_TO_RAD(0.0f*g_fTime)


hab mir deinen code nicht so genau angeschaut, aber das hier kann nicht stimmen.


Ja, sollte einfach 0 sein, naja *g_fTime ist sinnlos!

C-/C++-Quelltext

1
2
3
tbMatrixCamera(SpielerPosition -tbVector3(0.0f,0.0f,2.0f), 
                           vSpielerDirection, 
                             tbVector3(0.0f, 1.0f, 0.0f));


Also wenn ich das richtig verstanden habe, sollte es so aussehen! Aber das funktioniert leider gar nicht!...

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

5

13.08.2004, 12:11

Also die Position soll ja hinter dem Spiel sein: Also

SpielerPosition-(Distanzfaktor*vSpielerDirection)

Dann sollte es dem Spieler über die Schultern schauen: Also

SpielPosition+Vector3(0.0f, HöheÜberDenSchultern, 0.0f)

und vUp kannst du dann mit dem Kreuzprodukt der beiden berechnen

tbVector3Cross(SpielerPosition-(Distanzfaktor*vSpielerDirection), SpielPosition+Vector3(0.0f, HöheÜberDenSchultern, 0.0f));

Ich denke (oder hoffe zumindest :)), das sollte vernünftige Ergebnisse bringen.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

adapto

Treue Seele

Beiträge: 147

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

6

13.08.2004, 12:11

C-/C++-Quelltext

1
SpielerPosition -tbVector3(0.0f,0.0f,2.0f)

hier musst du direction mit einbauen.

das hier funktioniert nur um eine axe

C-/C++-Quelltext

1
tbVector3(sinf(Richtung), 0.0f, cosf(Richtung))

schau mal auf seite 321/322 da wird eine free camera ganz gut erklärt.
[/cpp]

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

7

13.08.2004, 12:54

ok, danke für eure Antworten, nur hatt es mir leider nicht so 100%ig geholfen!
Dank der Buchseite, weiß ich nun, wie ich auch nach oben und unten schauen kann! Aber mein Problem hatts immer noch nicht geholfen, wenn ich es so mache, wie es mir big_muff erklärt, dann kommt eine ganz komische Bewegung heraus..

Also ich hab mal schnell ein Bild gezeichnet, wie sich die Kamera begegen soll:


(Link)

Also ich weiß ich bin kein guter Zeichner:)!
Aber wenn sich das Objekt dreht, wie rechts dargestellt, dann sollte sich ja die Kamera auch so mitdrehen(also so eine Art kreisbewegung um das Objekt machen!)
Wenn ich jetzt zum Beispiel meine Kamera genau in die Mitte des Spielers setzte, also einfach SpielerPosition, dann funktioniert es auch mit der Drehung, aber ich bin eben komplett im Modell drinnen!
So, ich hoffe das Problem ist ganz klar geworden...


cya,
Stefan

adapto

Treue Seele

Beiträge: 147

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

8

13.08.2004, 13:24

C-/C++-Quelltext

1
dann sollte sich ja die Kamera auch so mitdrehen(also so eine Art kreisbewegung um das Objekt machen!) 

eigentlich nicht. du musst doch nur die kamera hinter deine figur setzen. also so wie deine zeichnung aussieht fehlt da irgendwo die richtung der spielfigur die auf die kamera übertragen werden muss.

Stefan

Alter Hase

  • »Stefan« ist der Autor dieses Themas

Beiträge: 668

Wohnort: Innsbruck

  • Private Nachricht senden

9

13.08.2004, 13:42

Zitat von »"adapto"«

C-/C++-Quelltext

1
dann sollte sich ja die Kamera auch so mitdrehen(also so eine Art kreisbewegung um das Objekt machen!) 

eigentlich nicht. du musst doch nur die kamera hinter deine figur setzen. also so wie deine zeichnung aussieht fehlt da irgendwo die richtung der spielfigur die auf die kamera übertragen werden muss.


Ja, die Kamera sollte immer normal auf die hintere Kante des Spielers stehen(nur eben mit einem Abstand)! Die Ansicht auf dem Bild ist ja die Draufsicht. Der blaue Strich ist also die Richtung in die die Kamera schauen sollte und wäre auch zugleich die Richtung des Spielers, wenn man ihn verlängern würde!
Ich habe jetzt also die Position des Spielers und die Richtung in die der Spieler schaut, daraus möchte ich jetzt die Kamera machen!
Irgendwie ist das ganze verwirrend, aber ich hoffe das noch jemand drauf kommt :)


cya,
Stefan

adapto

Treue Seele

Beiträge: 147

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

10

13.08.2004, 14:57

Zitat

Ich habe jetzt also die Position des Spielers und die Richtung in die der Spieler schaut, daraus möchte ich jetzt die Kamera machen!


dann verstehe ich nicht wo das problem ist.

Quellcode

1
2
(Kamera Position)= ((Position Spieler)*(Richtung Spieler)) - (Distanz)
(Kamera Richtung)= (Richtung Spieler)

Werbeanzeige