Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

tnecniv

Treue Seele

  • »tnecniv« ist der Autor dieses Themas

Beiträge: 164

Wohnort: BERLIN

  • Private Nachricht senden

1

30.03.2004, 18:11

Mauseingabe und drehen,... oder so!

HI!
Meine frage is wahrschinlich für erfahrene programmierer leicht zu beantworten deswegen erhoffe ich hier schnelle hilfe zu finden!!
also, ich versuch ein kleines spiel zu entwickeln und da hab ich jetzt ein model, das ich drehen möchte!! und zwar so, dass es hinterher genau auf einen punkt zeigt, der vorher durch die linke Maustaste festgelegt wurde!! eigentlich ja kein problem wenn der punkt der maustaste nicht transformiert wäre, weil ich ihn bisher von einer GUI hab!! Vielleicht ist die Lösung ja ganz einfach, aber ich komm jedenfalls nich drauf!! falls das wichtig ist: ich benutze die TriBase-E. und die klasse für das model ist von tbObject abgeleitet! ja, so ist das!!
bis dann

2

30.03.2004, 20:06

Du hast doch von deiner Mouse die 2D Koordinaten. Allerdings sind diese ja immer von 0 bis n. Also must du diese erst einmal Transformieren. Das geht recht einfach mit den beiden Formeln

Quellcode

1
2
3
4
5
6
7
8
9
10
11
inline float XCoord(const unsigned long x,
                    const unsigned long size)
{
    return (float)(x / (size * 0.5f) - 1.0f);
}

inline float YCoord(const unsigned long y,
                    const unsigned long size)
{
    return -(float)(y / (size * 0.5f) - 1.0f);
}
size gibt dabei immer die Ausdehnung an. Also z.B. 640 oder 480. Diest eine sehr einfach Lösung. Um einen gültigen 3D Vektor zu erhalten must du nur noch die Z Koordinate deines Modells nehmen.
ACHTUNG: Diese Methode ist nur gültig wenn man nur mit 2D Arbeitet. Also D3D für 2D Darstellung verwendet.

Ansonsten must du die Mouse Koordinaten anders umrechnen. Dafür gibt es dann eine Funktion in der TriBase Engine. Weis aber jetzt nicht wie die heißt.


Wenn du die Koordinaten hast, ist das Drehen kein Problem mehr. Ich nehme an das du einen Richtungsvektor hast, der angibt in welche Richtung dein Modell grad schaut. Du errechnest den Winkel zwischen diesem Richtungsvektor und dem Vektor der Mauskoordinaten. Und dann brauchst du nur noch das Modell mit einer Linearen Intepolation Rotieren lassen mit einer Normalen Rotationsmatrix.

EDIT:
Das war noch viel zu kompliziert gedacht. Noch einfacher. Normalisiere einfach den Vektor deiner Mauskoordinaten und führe eine Lineare Interoplation zwischen dem Aktuellen Richtungsvektor und dem Normalisierten Vektor der Mauskoordinaten durch.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

tnecniv

Treue Seele

  • »tnecniv« ist der Autor dieses Themas

Beiträge: 164

Wohnort: BERLIN

  • Private Nachricht senden

3

30.03.2004, 22:11

Danke!! ich hoffe das klappt!!
Sagt der igel zu dem dachs:
willst du größer sein, dann wachs!
- alte Fritz weisheit

Phil_GDM

Alter Hase

Beiträge: 443

Wohnort: Graz

Beruf: Student-Softwareentwicklung u. Wissensmanagement

  • Private Nachricht senden

4

31.03.2004, 08:13

Ich hätte da auch noch einen Vorschlag.
Du kannst doch die Funktion D3DXVec3Unproject (glaub das die so heißt) verwenden.
Mit dieser kannst du einen Punkt auf deiner Zeichenfläche wieder in einen Vektor im Raum Transformieren. Brachst dabei nur die Tiefe des Punktes angeben. Wies genau funktioniert kannst du ja in der SDK Hilfe nachlesen.

Werbeanzeige