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

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

51

29.07.2012, 08:27

Du meinst mit "beide addierst", 2 Vertices?

Edit: Mit irgendwelchen 2 Vertices geht es nicht.

Ich habe es doch nun schon 2mal erklärt:
(A+B)/2 ist das selbe wie (A-B)/2+B. Wenn Du ein planares (alles andere führt logischer Weise zu Unsinn) Rechteck hast, dann addierst du die Vektoren zweier gegenüberliegender Vertices, teilst das Ergebnis durch 2 und landest genau in der Mitte des Rechtecks. Das stimmt *immer*, auch dann, wenn das Rechteck schief im Raum hängt. Basierend auf Deinem Bild also: center = 0.5*(A+C)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (29.07.2012, 08:36)


52

29.07.2012, 10:24

@DuKugelschieber:
Die Rotation hat nicht funktioniert, aber mit glm schon. Deshalb benutzte ich glm. Aber Danke :)
@BlueCobold:
Ich hab es genau so gemacht, wie du es gesagt hast. Das kommt raus mit center = 0.5 * (A + C):

(Link)

Das sieht man nicht so richtig, dass es sich kreisförmig um einem Punkt bewegt...

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

53

29.07.2012, 10:28

Hö? Also ich finde schon, dass man das sieht. Allerdings rotierst Du scheinbar nur um eine der Achsen. Was dachtest Du denn, wie das aussehen soll?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

54

29.07.2012, 10:37

Ich wollte es gegen den Uhrzeigersinn drehen. Dieses Ergebnis, dass ich jetzt habe, hatte ich schon gestern *schäm*.

So mache ich das:

C-/C++-Quelltext

1
glm::rotate(M, angle, glm::vec3(center.x, center.y, center.z));


1. Ich weiß nicht, wie ich es bei allen Achsen rotieren kann.
2. Wie geht das mit dem gegen den Uhrzeigersinn drehen.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

55

29.07.2012, 10:51

2. Negativer Winkel?
1. Weiß nicht, bei meinem Matrix struct schon ;)

56

29.07.2012, 10:53

2. Ja, dass auch. Aber ich meine z.B. wie bei SFML setRotation.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

57

29.07.2012, 11:05

Was sind denn die Argumente bei glm::rotate? Denn ich finde nur welche, wo der letzte Parameter eine Normale ist und nicht der Angelpunkt. Dann wäre natürlich klar, dass Deine Berechnung des "centers" zwar einen Mittelpunkt berechnet, aber nicht das ist, was da als Parameter hin gehört.

@DeKugelschieber: In der Mathematik ist die positive Drehrichtung gegen den Uhrzeigersinn. Ich denke also nicht, dass er hier einen negativen Winkel braucht. Er rotiert lediglich um eine ganz falsche Achse.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

58

29.07.2012, 11:14

1. Parameter: Matrix
2. Parameter: Winkel
3. Parameter: Achse

Oh...ist mir gar nicht aufgefallen. Ich hab jetzt deswegen: M = glm::translate(M, center); davor gemacht und es funktioniert :). Doch leider wird es jetzt an der Hälfte der Kante rotiert.

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

59

29.07.2012, 11:24

Ganz ehrlich ich find meine Matrix Klasse schöner ^^
Hast du passend wieder zurück transformiert?

Hier mal meine Object2D Klasse aus der Sprite bei mir abgeleitet wird. Die hat unter anderem die Methode setRotationPoint(). Die Matrix wird dann logischerweise in getModelview() berechnet.

60

29.07.2012, 12:27

Endlich funktioniert es. :) Ich habe den Mittelpunkt falsch berechnet, es muss so sein: center = (A + D) * 0.5
Und (wie DeKugelschieber gesagt hatte) muss ich es zurück transformieren. :)

Danke an alle! :)

Werbeanzeige