3D Objekt zur Kamera drehen

Einstiegsfragen, Mathematik, Physik, künstliche Intelligenz, Engine Design
Antworten
MrSpaghettiCode
Beiträge: 1
Registriert: 16.08.2016, 15:48

3D Objekt zur Kamera drehen

Beitrag von 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?

Aharabada
Beiträge: 6
Registriert: 24.03.2016, 20:57

Re: 3D Objekt zur Kamera drehen

Beitrag von Aharabada » 16.08.2016, 18:01

Die Rotation sollte sich mehr oder weniger leicht mit dem Tangens bzw. Arkustangens berechnen lassen.

Benutzeravatar
Krishty
Establishment
Beiträge: 6709
Registriert: 26.02.2009, 12:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: 3D Objekt zur Kamera drehen

Beitrag von 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

Aharabada
Beiträge: 6
Registriert: 24.03.2016, 20:57

Re: 3D Objekt zur Kamera drehen

Beitrag von 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.

Antworten