Aktuelle D3D Kamera Position?
-
Ich steuere die Kamera nicht, da ich mich in einem D3D Proxy befinde
Scheint wohl so, das die Kamera also nicht abgefragt werden kann, sondern nur über die Verfolgung aller Transforms aufgezeichnet werden kann.
-
Kommt halt drauf an, was die API anbietet. Grundsätzlich sollte es es da schon möglich sein die Position zu bestimmen.
Es gibt aber auch eine Möglichkeit die gesetzten Matrizen von Direct3D abzufragen:
IDirect3DDevice9::GetTransform:
http://msdn.microsoft.com/en-us/library/ee421737(VS.85).aspx/EDIT
Das geht natürlich nicht, wenn die Transformationen per Vertexshader erledigt werden.
-
"Retrieves a matrix describing a transformation state."
Ich verstehe den Satz als: Zeigt an, ob diese Transformation ausgeführt wurde.
Es wird wohl keine Matrix mit einem Verschub vom Nullpunkt sein?
Damit kann ich dann nicht die Position der Kamera im Spielfeld ermitteln.
In OpenGL gibt es eine solche Abfrage der Kameraposition.Das hier:
http://www.gamedev.net/community/forums/topic.asp?topic_id=423434wird wohl auch nur gehen, wenn die Kamera keine Transformation erfährt?
-
Doch. Du bekommst die Matrix zurück, welche gesetzt wurde. Oder was glaubst du wüfür der zweite Parameter ist?
-
Natürlich bekommst du "eine" Matrix zurück, nämlich die letzte gesetzte.
Das ist dann die letzte Kameraverschiebung von der letzten Kameraposition aber keine Angaben vom Nullpunkt.
-
thenoname schrieb:
Natürlich bekommst du "eine" Matrix zurück, nämlich die letzte gesetzte.
Das ist dann die letzte Kameraverschiebung von der letzten Kameraposition aber keine Angaben vom Nullpunkt.Nein. Eine solche Matrix transformiert Vertices und die dürfen selbst aber nicht verändert werden. Folglich ist immer alle Information enthalten. Man setzt ja eine Matrix und multipliziert nicht einfach eine irgendwie dazu.
http://msdn.microsoft.com/en-us/library/ee422544(VS.85).aspx
-
Ok, ich sehe das diese einfache Umwandlung mich überfordert.
Ich kann mit GetTransform mit dem Kamera Flag meine Kamera Matrix bekommen, soweit so gut.
Wie rechnet man daraus eine x,y,z Position?Das geht natürlich nicht, wenn die Transformationen per Vertexshader erledigt werden.
Dieser Satz macht es aber zunichte. Daher bekomme ich also wieder nicht die aktuelle Kamera Position da viele neue Spiele das wohl verwenden, oder gibt es hier spezielle andere Abfragemöglichkeiten?
Wäre schön, wenn du mir da auf die Sprünge helfen könntest!
Grüße
TheNoName
-
Ehm.. Was willst du denn genau machen? Sprich was benutzt du für eine Bibliothek?
Wie gesagt. Üblicherweise kann man die Position ganz einfach von der Bibliothek abgfragen.
-
Hi,
ich verwende die letzte d3d9 SDK von Microsoft.
Ich will die xyz Ausrichtung der Kamera im Spiel zum Nullpunkt der Spielewelt.Üblicherweise kann man die Position ganz einfach von der Bibliothek abgfragen.
Na dann raus mit der Sprache
-
Ich glaube die Tatsache, dass du das Spiel nicht selbst geschrieben hast sondern ein externer Prozess bist der von einem *beliebigem* Spiel diese Daten haben will ist noch nicht ganz durchgedrungen.
MfG SideWinder
-
SideWinder schrieb:
Ich glaube die Tatsache, dass du das Spiel nicht selbst geschrieben hast sondern ein externer Prozess bist der von einem *beliebigem* Spiel diese Daten haben will ist noch nicht ganz durchgedrungen.
Doch sowas ist mir durchaus durch den Kopf, als ich seinen letzen Post gelesen habe. Aber ich habe ja gefragt, was er genau machen will.
Ich dachte auch, dass es ev. ein Modd werden könnte, aber da das bei beliebigen spielen gehen soll wohl kaum.Die einzige Methode, die sicher bei jedem Spiel funktioniert ist das auslesen von Koordianten der Kamera aus dem Speicher. Ist aber denke ich eine mühseligere Angelegenheit, weil du ja nicht weisst, was das für Werte sind.
-
Hallo,
es handelt sich um eine Aufzeichnung der Bewegungen in einem Spiel.
Es handelt sich nicht um einen MOD oder einen Cheat, mehr um eine
Analyse der Bewegungen. Nun ist zufälligerweise die Kamera gleich der
gesuchten zu logenden Position. D3D9 Proxies die das Spiel beim Befehl "Present"
abchecken kann ich programmieren, die Asuwertung ist
auch kein Problem, nur der kleine Schritt die Kameraposition zu bekommen
bereitet mir noch ProblemeEs muss einfach eine Möglichkeit geben!
Speicherwerte kommen wegen der vielen verschiedenen Spiele nicht in Frage.
Man müsste dies mühselig durchführen, das wurde so bis jetzt durchgeführt
und soll nun durch den Proxy abgelösst werden.
-
Phu. Da was generelles zu machen ist, denke ich recht schwierig.
Eben dadurch, dass das jeder praktisch so machen kann, wie er will.Das hier gibt dir, denke ich eine gute Übersicht, was für Schritte gemacht werden und wo du am ehesten dich einklinken solltest:
http://www.xmission.com/~legalize/book/preview/poster/pipeline-9.0.png
Also bestimmt nach der FFP/Vertex Shader, weil vorher kann der Vertex in jedem Zustand sein..
-
Man müsste den Zweck des Programmes kennen. Evtl. reicht es ja auch sich in DirectInput einzuhängen?
MfG SideWinder
-
Hallo,
DirectInput haben wir schon durch, das reicht nicht.
Der Zweck ist wie schon beschrieben ein Analyser, der die Bewegungen aufzeichnet.
Das sind Geschwindigkeiten und Beschleunigungen des Spielers.Kann man davon ausgehen, das die D3D Mathematik Funktion
D3DXMatrixLookAtLH D3DXMatrixLookAtRH
in den Spielen immer verwendet wird?
-
Ich habe jetzt einen lustigen Thread gefunden:
http://www.uc-forum.com/forum/combat-arms/60933-camera-position.html
http://www.tech-archive.net/Archive/Development/microsoft.public.win32.programmer.directx.managed/2005-07/msg00039.htmlDas mit dem Inverse ist eine Idee, was wäre das Problem mit dem Vertex Shader?
Und dann haben die noch den Direct Sound angesprochen, anscheinend weil dieser auch im 3D Raum erzeugt wird und an der Kamera endet.
-
Wie gesagt. Ich sehe das Problem nicht darin aus einer Transformationsmatrix die Position raus zu holen, sondern eher darin eine allgemeine Methode zu haben, um an eine solche Matrix zu kommen.
Falls das Spiel tatsächlich noch die FFP benutzt, dann kannst du das bestimmt rausbekommen. Halte ich aber für sehr unwahrscheinlich, dass moderne Spiele nicht komplett auf Vertexshader setzen..
DirectSound kann sicher ein Anlaufpunkt sein, aber ich denke, dass auch da sehr viele was eigenes oder zumindest was anderes benutzen. (z.B fmod).
-
Ok, ich habs ausprobiert, ist nur was für DX8 und wenige DX9 Spiele.
Direct Sound fällt wegen der "anderen" Möglichkeiten aus, vornehmlich weil ab Vista das Soundsystem geändert wurde.Gibt es eine Möglichkeit temporär kurzzeitig ein eigen erzeugtes Object an die Kamera anzuheften und dessen Position abzufragen?
// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position // and normal in the camera space) should be taken as texture coordinates // Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from // #define D3DTSS_TCI_PASSTHRU 0x00000000 #define D3DTSS_TCI_CAMERASPACENORMAL 0x00010000 #define D3DTSS_TCI_CAMERASPACEPOSITION 0x00020000 #define D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR 0x00030000 #define D3DTSS_TCI_SPHEREMAP
z.B. eine Lichtquelle, die beim Init auf die Cameraposition gesetzt wird, dann die Position ausgelesen wird und dann wieder gelöscht wird.
Man bräuchte dazu irgendwelche Macros die das ermitteln selbst machen.