JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Stufenlose Rotation (inkl. 30kb-Bild, nur als Warnung ;))
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 30.08.2003, 20:43    Titel: Antworten mit Zitat

Was genau macht der bei meiner Funktion falsch hab das mal bei mir getestet, mit den Änderungen die ich beschrieben habe funktioniert alles bestens. Must eben nur drauf achten das die Winkel als Grad ausgegeben werden.

Zu deiner Frage: diese Quadranten habe ich bei meiner Funktion berücksichtigt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 30.08.2003, 21:25    Titel: Antworten mit Zitat

Hallo,

vorausgesetzt ich habe das richtig verstanden und deine Aenderung bezog sich auf den Funktionsaufruf, passiert folgendes.

Es gibt vier Winkelquadranten, die entweder von 270 - 360° oder von 90 - 180° reichen. Ok. Soweit noch ned so schlimm Wink
Problematisch allerdings wirds, wenn man sich in einem Quadranten bewegt. Dort wechselt das Objekt seine Richtung nicht mehr beim Hin-und Zurueck auf selbem Vektor, da der Winkel ja eigentlich der gleiche bleibt.
Aber das groeßte Problem bleibt, dass sich das Objekt total in die falsche Richtung orientiert.
Ich brauche zwar den Winkel in Bogenmaß, aber das macht ja nix, weil ichs ja dann beim benutzen umrechnen kann, wenn ich das richtig sehe.

Funktioniert also leider nicht so richtig zuverlaessig, weil sich das Objekt ja immer in die Richtung ausrichten sollte, in die ich geklickt habe. *seufz*

Hast du es im 2D oder 3D-Bereich benutzt? Obwohl es keinen Unterschied machen sollte Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 30.08.2003, 21:32    Titel: Antworten mit Zitat

Habs schon mal in beiden genutzt da aber immer nur auf der 2d ebene (Funktion nimmt ja auch nur 2 koordinaten an Smile).

Kann dir ja mal ein schnelles Programm schreiben wo es funktioniert wenn du willst (in 10 min hab ich es dann hochgeladen und geproggt).

Wie gesagt bei mir funktioniert das ganze, vieleicht habe ich deine antwort auch nicht ganz verstanden:


    Funktioniert also leider nicht so richtig zuverlaessig, weil sich das Objekt ja immer in die Richtung ausrichten sollte, in die ich geklickt habe.


Genau das macht aber die Funktion rufst du sie falsch auf ?? schick mir mal dein Codefragment davon.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 00:24    Titel: Antworten mit Zitat

Hi,

ok ich mach das so im 3D-Raum, aber nur in einer Ebene. Nimmt ja nur zwei Achsen wie du schon sagst Wink:

Code:


Aufruf:
RotationY = (absf(RotToAngle(Start.x, Start.z, GoTo.x, GoTo.z) - 360));


Naja und der Rest is ja wie schon bereits ausgiebigst diskutiert Wink Einzig rufe ich den Wert dann als Bogenmaß auf. Also RotationY * D3DX_PI/180. Daran sollte es aber nicht hapern?
Also ich habs grad mal probiert, ohne die lineare Bewegung. Von 100 Klicks gehen genau 2-3 in die annaeherungsweise Richtung.

Wenn du mal ein Bsp. parat hast waere das super.

Danke...

Nachfrage: Der Algo, den ich als Ersatz hatte. Was sagst du dazu? Problematisch wegen der Quadranten hmm? Nur so aus Neugier. Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Manuel87
Mini JLI'ler



Anmeldedatum: 28.07.2003
Beiträge: 33

Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 10:49    Titel: Hilfe naht! Antworten mit Zitat

Hi!
Wenn ich dein Problem richtig verstehe willst du eine Rotation in einer Ebene!

Ich gehe mal von einer 2d Welt aus, auch wenn du 3d willst, so kann ich dir das besser erklären! Nimm am besten 2 Vectoren (von mir aus auch normalisierte Vectoren):
einen für dein sprite und einen für den Zielvector denn du ja leicht berechnen kannst.
Nun rechne von beiden die Grad aus. Dann schau noch welcher weg länger ist: links vorbei oder rechts vorbei!Und dann rotier!
ISt jetzt sicher kompliziert aber ich werd schau, wenn du noch hilfe brauchst code ich dir ein kleines 2d Beispiel Programm. Brauch dann nur deine E-MAil Adresse!
c u!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 31.08.2003, 10:51    Titel: Antworten mit Zitat

Hab deinen Algo mal kurz überflogen sieht schon recht toll aus, aber wie du sagtest ist es Problematisch wegen den Quadranten.

Hier das Beispiel (Schnelles bastel ich lieber in Borland der Code ist trotzdem verwendbar):

www.dragonfx.de/download/winkel.zip

Und hier mal meine Umwandlungsfunktion von GradinBogenmaß (was deiner auch entsprechen würde:

Code:

inline double DegToRad(double grad) {return 6.283185307/360*grad;}

_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 12:57    Titel: Antworten mit Zitat

Hallo an euch beide,

"Hilfe naht"?? Is ja nett Wink

So @FallenAngel84. Ich hab mir dein Demo mal angekuckt. Das Problem ist, dass das Ding das gleiche macht wie bei mir auch. Also gehe ich mal davon aus, dass ich all das richtig verstanden habe. Auch gleicht dein Code bis auf die Umrechnung meinem. Hmmm.....

Da dein Punkt keinen "Schnippel" hat, an dem man die Ausrichtung erkennen kann und in anbetracht der Tatsache das obiges zutrifft, denke ich, dass der Fehler im setzen des Winkels liegt. Oder in der Umgebung. Vielleicht auch in der Ausrichtung des Modells.



Nehmen wir das Bild hier. Der aeußere Kreis repraesentiert die Ergebnisse der moeglichen Winkel der RotToTarget-Funktion, der innere Kreis jedoch repraesentiert die moeglichen Winkel, die das Modell kennt. Wenn man das sieht, merkt man wo der Fehler liegen muesste, weil das Modell ja die Winkel 303°, die ja sowohl links oben, als auch rechts oben moeglich sind, falsch interpretiert und sich falsch ausrichtet Crying or Very sad

Da ist was bei mir falsch, oder ein genereller Denkfehler... vielleicht hilft das ja zur Illustration...

Tut mir echt leid, dass ich das Problem so breitwaelze Wink Wenns nur an der Mathematik laege... Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 31.08.2003, 13:17    Titel: Antworten mit Zitat

Also beio meinem Beispiel wird obern beim Programmtitel die Ausrichtung angezeigt, aber dein Problem scheint es zu sein die Ausrichtung auf deinem Objekt sichtbar zu machen und nicht nur den Winkel zu bekommen, kann das sein ?

Und do richtig verstehe ich dein Bild nicht ?

Der äussere Ring soll die ZielZuWinkel Funktion sein oder ?

Und der innere Ring die möglichen Werte deines Objekts ?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 15:13    Titel: Antworten mit Zitat

Ja genau. Der aeußere Ring gibt die Moeglichen Winkel der Funktion von dir bei mir wieder. Der innere Ring ist das, was das Objekt versteht.

Dem Objekt die Winkel beizubringen is kein Thema, aber es ist eben sehr begrenzt, wg. oben gezeigtem Winkel. Auch bei deinem Beispiel gibts ja immer "nur" einen Abschnitt an Winkeln. Und da liegts glaube ich. Und da das Objekt den Winkel 303° oder 160° immer gleich interpretiert kommts eben auch zu den Fehlern wenn ich rumklicke.

Nur was dagegen machen is die Frage??
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 31.08.2003, 15:19    Titel: Antworten mit Zitat

Also macht im gesammten dein Objekt die Probleme da es die Winkel nicht korrekt umwandelt ?

Wie soll der das was falsch machen und wie ???

Berechnest du die Endtransformation nicht richtig ? Zeig mal ?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 15:59    Titel: Antworten mit Zitat

Hmmm ich poste mal alles was damit zu tun hat:

Code:


Objektintern:

Rotationsmatrizen:

D3DXMatrixRotationX(&RotMatrixX,m_RotX);
D3DXMatrixRotationY(&RotMatrixY,m_RotY);
D3DXMatrixRotationZ(&RotMatrixZ,m_RotZ);

D3DXMatrixIdentity(&RotMatrix);

D3DXMatrixMultiply(&RotMatrix, &RotMatrix, &RotMatrixX);
D3DXMatrixMultiply(&RotMatrix, &RotMatrix, &RotMatrixY);
D3DXMatrixMultiply(&RotMatrix, &RotMatrix, &RotMatrixZ);

D3DXMatrixMultiply(&m_WorldMatrix, &RotMatrix, &TransMatrix);
D3DXMatrixTranslation(&TransMatrix, m_vPosition.x, m_vPosition.y, m_vPosition.z);

   D3DXMatrixMultiply(&m_WorldMatrix, &RotMatrix, &TransMatrix);

   m_lpD3DDevice->SetTransform(D3DTS_WORLD, &m_WorldMatrix);

Coder fuer die Drehung:

RotationY = (absf(RotToAngle(m_MeshPos.x, m_MeshPos.z, HitVec.x, HitVec.z) - 360));



So. Der Rest steht ja so in etwa eh schon hier. Die Variable lege ich hier mal der Einfachheit halber direkt mit m_RotY hin. Eigentlich veraendere ich diese nicht direkt, sondern ueber eine andere Variable, da es unterschiedliche Klassen sind, aber egal.

Das Einzige ist noch, dass ich
Code:
 m_RotY * D3DX_PI/180

aufrufe, aber das wirds ja nicht sein. m_MeshPos ist ein Vektor, der zum geklickten Zeitpunkt die Stelle (nicht den Klick) des Meshes im 3D-Raum wiederspiegelt und HitVec ist der Vektor, der die Stelle des Klicks im Raum wiedergibt.

Tja. Bei all dem, kommt dann eben obiges Kreisverhaeltnis raus. Was er genau falsch macht noch:

1 Beispiel:
Ich klicke (vom Kreis oben her gesehen) rechts oben in Richtung Ecke. Der Winkel der rauskommt ist in etwa 330°. Das Objekt dreht sich auf 330°, jedoch liegen die 330° ja im unteren rechten Quadranten vom Objekt aus gesehen. Ergo dreht es sich ja korrekterweise dahin.
2 Beispiel:
Ich klicke in die linke obere Haelfte Richtung Ecke. Der Winkel der dort besteht ist natuerlich auch 330° in etwa. Also bleibt das Objekt auch in der 330°-Ausrichtung, was ja aber falsch ist.

Ich glaub jetzt wirds recht deutlich, worans hapert Wink

Hab ich mich schon fuer deine Zeit bedankt?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 31.08.2003, 16:08    Titel: Antworten mit Zitat

Ja das Problem hast du gut erklärt aber wieso der das nicht richtig ausgibt verstehje ich auch nicht. Hab bei mir die Funktion getestet (das Beispielprogramm) aber er zeigt bei mir immer den richtigen Winkel an. Ob es an der math.h liegt kann ich auch nicht sagen.

Kommt der Fehler den du Beschrieben hast nun bei deinem Prog oder bei meinem Prog vor wenn bei meinem dann schreib mal du ein Prog will mal sehen ob da was anderes passiert.

Ich verstehe das echt nicht warum der bei dir einen fast falschen Wert rausbekommt bei mir funktioniert alles korrekt ??????? Evil or Very Mad Evil or Very Mad
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
X-FILE
Super JLI'ler



Anmeldedatum: 12.07.2003
Beiträge: 349

Medaillen: Keine

BeitragVerfasst am: 31.08.2003, 16:55    Titel: Antworten mit Zitat

Hmm witzig. Wenn das in der Fensterleiste Grad sind, dann macht dein Programm auch Fehler. Und zwar den gleichen wie bei mir. Allerdings in einem Bereich von 90 - 180°. Drueber raus gehts nich und drunter auch nicht Wink

Beaengstigend? Wenn ja, dann schreib ich dir mal mein Programm inkl. 3D um und du testest mal...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 31.08.2003, 17:02    Titel: Antworten mit Zitat

Ok werd dir ein 3d Prog basteln. Das Prog wird einen Soldat enthalten der sich zum Cursor dreht.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 31.08.2003, 17:41    Titel: Antworten mit Zitat

Hier der Link zum Proj:

www.dragonfx.de/download/target.zip

Wenn du teile des Quellcodes sehen willst nur fragen, hätt ihn ja mitgesendet wäre aber zu gross geworden.

Die Maussteuerung ist simpel, aber es reicht aus für dieses Beispiel.
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum