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

1

25.10.2015, 20:25

Charakter Mesh nach Spieler Position und Blick zeichnen

Hallo Leute

Ich möchte für mein Spiel einen kleinen Charakter zeichnen ( ein Mensch ) der von der Kamera nach unten leicht wahrgenommen werden kann.
Er dient später auch im Multiplayer dazu, das man sich untereinander sehen kann, hier mal ein kleines Bild:


(Link)


Die hier zusehende Character Mesh ist von 3DAssetForge.

So wie es auf dem Foto zusehen ist, möchte ich es gerne haben.
Ich stehe und ändere mein Sichtpunkt und der Charakter dreht
seinen Körper mit zu der Richtung. Allerdings sobald ich mich
bewege, passiert sowas:


(Link)



Scheinbar berechne ich etwas falsch.
Ich zeige jetzt mal den Code, den ich
zum berechnen nutze:

D3DXMATRIX Scale;
D3DXMatrixScaling( &Scale , 0.8F , 1.0F , 0.8F );
D3DXMATRIX Rotation;
D3DXMatrixRotationYawPitchRoll( &Rotation , D3DXToRadian( pCamera->m_LastYaw ) , 0.0F , 0.0F );
D3DXMATRIX Translation;
D3DXVECTOR3 CameraPosition = pCamera->GetPosition();
D3DXMatrixTranslation( &Translation , CameraPosition.x , ( CameraPosition.y + 0.5F ) , CameraPosition.z + 0.2F );
D3DXMATRIX World = ( Scale * Translation * Rotation );
pDirect3DDevice9->SetTransform( D3DTS_WORLD , &World );
..
....
......


Das Problem tritt nur auf, wenn ich an der rot markierten Stelle des
Codes, die "+ 0.2F" einfüge. Dies muss allerdings sein, weil ich
ansonsten den Charakter im Körper sehe, statt ein Stück von vorn.



Vielen Dank im voraus, Mfg. :love:

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

25.10.2015, 21:11

Ich glaube, dass du die Transformationen in der falschen Reihenfolge ausführst (Stichwort: Matrixmultiplikation und Kommutativität).

3

25.10.2015, 22:01

Translation ->Rotation -> Scale -> Translation
Wozu ist die 2. Translation ?

Danke für die Antworten
Mfg. Leon

CentuCore

Frischling

Beiträge: 43

Wohnort: Wien

  • Private Nachricht senden

4

25.10.2015, 22:50

Man bewegt das Objekt vom alten Punkt zum Ursprung rotiert und skaliert es und dann bewegt man es zum neuen Punkt wieder zurück

Ja, wenn das Objekt im World-Space ist.
Wenn's (wie normalerweise der Fall) im Object-Space ist dann reicht der SRT-Schritt.

Edit: Wenn ich S * R * T schreibe, wie löst der C++-Compiler den Ausdruck dann auf?
Also wird zuerst S * R oder R * T berechnet.
Schon klar, dass das für Matrizenberechnung keine Rolle spielt.

Werbeanzeige