3D Objekt zur Kamera drehen

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design

3D Objekt zur Kamera drehen

Beitragvon MrSpaghettiCode » 16.08.2016, 16:01

Hallo, mein Projekt ist ein 3D RPG wo Gegner, Held und Items 2D sind.
Diese 2D Sprites werden auf eine 3D Fläche/Ebene gelegt.
Bild


Problem:
Jedoch ist bei einer zu starken Neigung, die durch eine feste Position der Kamera verursacht wird, das Objekt kaum erkennbar und verliert an Pixel. Das würde ich gerne beheben.
Bild


Meine Lösung:
Bild

Ich würde gerne alle 3D Objekt so ausrichten, dass diese immer frontal zur Kamera zeigt.
Auf dem Bild leider nicht erkennbar, die Flächen sollten nach unten zur Kamera hin immer mehr von Stehen zu liegend wechseln
(also um 90° Drehen)
Dazu habe ich die X,Y und Z Koordinaten der Kamera und vom Objekt selbst.
Hat da jemand vielleicht eine kleine Formel um Objekte zur Kamera zu drehen oder eine gute Idee?
MrSpaghettiCode
 
Beiträge: 1
Registriert: 16.08.2016, 15:48

Re: 3D Objekt zur Kamera drehen

Beitragvon Aharabada » 16.08.2016, 18:01

Die Rotation sollte sich mehr oder weniger leicht mit dem Tangens bzw. Arkustangens berechnen lassen.
Aharabada
 
Beiträge: 6
Registriert: 24.03.2016, 20:57

Re: 3D Objekt zur Kamera drehen

Beitragvon Krishty » 20.08.2016, 00:03

In 3D willst du normalerweise eine Matrix haben, die objektlokale Koordinaten zu Weltkoordinaten transformiert (World Matrix). Darin sind üblicherweise die Rotationen des Objekts gespeichert.

Soll das Objekt immer zur Kamera zeigen, kannst du einfach die Weltmatrix des Kameraobjekts (erste 3×3 Werte) in die Weltmatrix des Objekts kopieren. [Hat deine Kamera keine Weltmatrix, kannst du sie aus der Inversen der View Matrix berechnen.] Dann hat es immer die selbe Ausrichtung wie die Kamera.

WICHTIG: Falls die Kamera z.B. entlang +Z blickt, musst du die Sprite so modellieren, dass die solide Fläche nach -Z zeigt, nämlich immer zur Kamera hin! Sonst dreht sich die Sprite die ganze Zeit von dir weg und du wunderst dich, warum du nichts siehst.

Das bewirkt übrigens, dass das Objekt auch mit der Kamera rollt. Würdest du also z.B. einen Flugsimulator schreiben und die Sprite wäre der Mond, dann würde der Mond mit dem Flugzeug mitrollen. In den meisten 1st- und 3rd-Person-Spielen ist das aber unwichtig. (Die alten GTAs machen es z.B. ganz genau so.)

Diese Lösung würde ich sin/cos/tan vorziehen – quasi alle Transformationsprobleme in der 3D-Grafik lassen sich über Skalarprodukt und Kreuzprodukt (also Grundrechenarten) lösen, und zeigen dabei weniger Genauigkeitsverlust als sin/cos/tan/etc.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
 
Beiträge: 6588
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy

Re: 3D Objekt zur Kamera drehen

Beitragvon Aharabada » 20.08.2016, 21:05

An die Matrix hatte ich gar nicht gedacht. Das ist natürlich eine deutlich elegantere Lösung als mit sin, etc.
Aharabada
 
Beiträge: 6
Registriert: 24.03.2016, 20:57


Zurück zu Allgemeine Fragen der Spieleentwicklung

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast