Hallo zusammen,
ich hab folgende Frage:
Wie ist es möglich, dass sich eine Texture dort hin dreht wo der Mauszeiger ist?
Respektiv wie setz ich es um damit ich die Richung kriege?
Lg Dr.Med.Lol
Was ist das denn für eine Frage? Texturen in Richtung Mauszeiger drehen? Gehts ein bißchen konkreter auch?
Weeks of programming can save you hours of planning
Tut mir leid, dass es nicht verständlich war:
In meinem Fall ist es so, dass eine Textur den Spieler darstellt (Männchen). Wenn ich jetzt mit dem Mauszeiger um das Männchen fahre soll die Blickrichtung des Männchen richtung Mauszeiger schauen. D.h die Figur dreht sich zum Mouszeiger, sowie eine Kompassnadel nach Norden. Lg
Die Drehrichtung hast du ja durch die Position des Mauszeigers und des Spielers. Dann mußt du dir eine Rotationsmatrix erstellen, und im Shader die Textur damit transformieren.
Weeks of programming can save you hours of planning
Wenn du doch schon selber erkennst und schreibst, dass es immer noch dasselbe Problem ist, dann verwende bitte auch denselben Thread.
Bitte keine Crossposts. Siehe [Hinweis] Wie poste ich richtig? Punkt 2.2.
Threads zusammengefügt.
Hi zusammn,
Ich habe noch das Problem, dass ich meine Spielfigur (ein Textur2D)
bei jedem Update() so drehen will, das die Blickrichtung in Richtung Mauszeiger zeigt.
Zur verständlichung hab ich noch eine Grafik angehängt.
Wenn jemand ne gute Idee/ Lösungsvorschlag hat - nur zu 😁
Lg Dr.Med.Lol
Du kannst über die Funktion Math.Atan2 die Richtung als Winkel (in Radiant!) bestimmen in die deine Figur blicken soll:
double angle = Math.Atan2(yMouse - yOrigin, xMouse - xOrigin);
Damit solltest du deine Figur dann entsprechend rotieren.
Danke fÜr die Antwort. Ich denke so mÜsste es gehen.
Ich hab schon angefangen das Problem mit Rechungen zu lösen 😉
Lg Dr.Med.Lol
Die Figur dreht sich zwar irgendwie, ist aber ziemlich unkontrolliert.
Ich denke ich mach ein durcheinander mit dem Ratationswert, Radiants etc.
Mein Code:
ms = Mouse.GetState();
angle = Math.Atan2(ms.Y - Origin.Y, ms.X - Origin.X);
Rotation += (MathHelper.ToDegrees((float)angle)/360);
angle = 0;
Gezeichnet wird das ganze so:
spriteBatch.Draw(texture, Position, SourceRect, Color.White, Rotation, Origin,1.0f, SpriteEffects.None, 1.0f);
Mach ich ein Überlegungsfehler oder liegt es einfach an der Umrechnung der Werte, dass es da ein Fehler hat?
Lg Dr.Med.Lol
Ich verstehe das Problem nicht wirklich. Wenn du statt mit Winkelfunktionen mit Vektoren arbeiten würdest, wäre es viel einfacher. Der Richtungsvektor ist dann einfach Cursor.Pos - Texture.Origin. Aus diesem Vektor kannst du dir dann sehr einfach eine Transformationsmatrix erstellen, und die dem Shader als Parameter zuweisen.
// Edit:
Dein Problem liegt wahrscheinlich daran, daß du mit Winkeln arbeitest, aber Rad-Werte hast.
Weeks of programming can save you hours of planning
Hmm.. Gute Idee, wäre um ein vielfaches einfacher. Werds gleich mal versuchen. Danke für den Hinweis!
Welche Matrix würdest du benutzen? Bei der "CreateRotationZ" muss man ja einen flaot Wert angeben, welcher ja nicht bekannt ist, ansonsten müsst man ja mit Winkeln berechnen?
Nehmen wir mal an, der Richtungsvector ist die X-Komponente. Dann wäre die Y-Komponente die, die nach oben zeigt, also [0,1,0]. Die fehlende Z-Komponente ist dann X x Y (Cross Multiplication). Wichtig ist, daß alle 3 Vektoren normalisiert sind, dann kannst du dir eine Matrix daraus erstellen:
X.X X.Y X.Z 0
M = Y.X Y.Y Y.Z 0
Z.X Z.Y Z.Z 0
0 0 0 1
Weeks of programming can save you hours of planning
Könntest du das vielleicht ein bisschen genauer erklären?
Ich habe noch nicht viel mit Matrzen gemacht.
Am besten mit einer Beispielvariablen.
Momentan kann ich mir es noch nicht ganz vorstellen wie das funktionieren soll, resp. warum.
Lies doch bitte erstmal in der Doku nach. In der DirectX-Doku ist die Matrix-Klasse sehr ausführlich beschrieben, sicherlich auch in der XNA-Doku. Bitte hab ein wenig Verständnis dafür, daß ich hier nicht die komplette Funktionisweise von Matrizen erklären kann.
Weeks of programming can save you hours of planning