Liebe/-r Experte/-in,
wie kann ich die aktuelle Betrachterposition in einem Ego-Shooter herausfinden?
Was ich meine ist folgendes:
Du schaust mit der Figur „geradeaus“. Nun schaust du nach „links“ um 90°. Wie kann ich per c# diese 90° ermitteln?
Liebe/-r Experte/-in,
wie kann ich die aktuelle Betrachterposition in einem Ego-Shooter herausfinden?
Was ich meine ist folgendes:
Du schaust mit der Figur „geradeaus“. Nun schaust du nach „links“ um 90°. Wie kann ich per c# diese 90° ermitteln?
Hallo,
Falls ich das richtig verstehe, möchtest du den Spielablauf mittels visueller Beobachtung nachvollziehen. Also konkret; die Bewegung bzw. Rotation der Spielfigur eines externen Programms ermitteln. Dabei kann ich dir nicht helfen, aber die Entwickler aus der Augmented Reality -Ecke dürften Lösungen dafür bereithalten (Stichworte: motion tracking, camera tracking, track points, perspective reconstruction).
Was du in diesem Fall ansprichst ist allerdings sehr komplex. Falls es dir nur ums Cheaten im Multiplayer geht, solltest du einen realistischeren Weg einschlagen.
Jemrijà
Hallo,
welche Daten liegen denn vor, aus denen die Kameraposition errechnet werden kann? Üblicherweise hat man eine View-Matrix bzw. die Einzelkomponenten Position, Richtung und Oben-Richtung.
Was genau willst du denn ausrechnen?
Nico
Ich habe kein Code-Fundament. Ich möchte aus einem beliebigen DirectX-Shooter die Werte für Pitch & Yaw am besten in Grad erhalten. Ich habe gehört, daß dies mit sogenannten Hooks funktioniert, die sich im Speicher einnisten.
Ich bin auf der Suche nach einem c#-Projekt, das ich anpassen kann.
Da bin ich leider etwas überfragt. Ich glaube aber, die einzige Chance besteht darin, die View-Matrix abzufangen, die an die Grafikkarte geschickt wird. Aber wie man da ran kommt, weiß ich nicht.
Wenn du die Matrix hast, würdest du so an die Position der Kamera kommen. g_V ist die Matrix.
x = (-g\_V.\_33 \* g\_V.\_22 \* g\_V.\_41 + g\_V.\_23 \* g\_V.\_32 \* g\_V.\_41 + g\_V.\_33 \* g\_V.\_21 \* g\_V.\_42 - g\_V.\_23 \* g\_V.\_31 \* g\_V.\_42 + g\_V.\_31 \* g\_V.\_22 \* g\_V.\_43 - g\_V.\_21 \* g\_V.\_32 \* g\_V.\_43)/ (-g\_V.\_33 \* g\_V.\_21 \* g\_V.\_12 \* + g\_V.\_23 \* g\_V.\_31 \* g\_V.\_12 + g\_V.\_33 \* g\_V.\_11 \* g\_V.\_22 - g\_V.\_13 \* g\_V.\_31 \* g\_V.\_22 - g\_V.\_23 \* g\_V.\_11 \* g\_V.\_32 + g\_V.\_13 \* g\_V.\_21 \* g\_V.\_32)
y = (-g\_V.\_33 \* g\_V.\_12 \* g\_V.\_41 + g\_V.\_13 \* g\_V.\_32 \* g\_V.\_41 + g\_V.\_33 \* g\_V.\_11 \* g\_V.\_42 - g\_V.\_13 \* g\_V.\_31 \* g\_V.\_42 + g\_V.\_31 \* g\_V.\_12 \* g\_V.\_43 - g\_V.\_11 \* g\_V.\_32 \* g\_V.\_43)/ (g\_V.\_33 \* g\_V.\_21 \* g\_V.\_12 - g\_V.\_23 \* g\_V.\_31 \* g\_V.\_12 - g\_V.\_33 \* g\_V.\_11 \* g\_V.\_22 + g\_V.\_13 \* g\_V.\_31 \* g\_V.\_22 + g\_V.\_23 \* g\_V.\_11 \* g\_V.\_32 - g\_V.\_13 \* g\_V.\_21 \* g\_V.\_32)
z = (-g\_V.\_23 \* g\_V.\_12 \* g\_V.\_41 + g\_V.\_13 \* g\_V.\_22 \* g\_V.\_41 + g\_V.\_23 \* g\_V.\_11 \* g\_V.\_42 - g\_V.\_13 \* g\_V.\_21 \* g\_V.\_42 + g\_V.\_21 \* g\_V.\_12 \* g\_V.\_43 - g\_V.\_11 \* g\_V.\_22 \* g\_V.\_43) / (-g\_V.\_33 \* g\_V.\_21 \* g\_V.\_12 + g\_V.\_23 \* g\_V.\_31 \* g\_V.\_12 + g\_V.\_33 \* g\_V.\_11 \* g\_V.\_22 - g\_V.\_13 \* g\_V.\_31 \* g\_V.\_22 - g\_V.\_23 \* g\_V.\_11 \* g\_V.\_32 + g\_V.\_13 \* g\_V.\_21 \* g\_V.\_32)