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

11

16.06.2016, 14:29

Willst du mich veralbern, Sacaldur? Du sagst, dass links oben bei allgemeinen Vierecken keinen Sinn macht und ich sage, dass das meine Aussage da auch explizit nur in Bezug auf Rechtecke gemacht wurde. Ja, ich habe auch über andere Formen geredet, aber nicht in Bezug auf den Origin, sondern in Bezug auf "Center" allgemein. Bitte nicht verschiedene Dinge mischen und mir dann vorwerfen, dass sie dann keinen Sinn mehr machen.
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]

12

16.06.2016, 20:02

Vielen Dank, das ist wirklich brauchbarer Input. Ich habe jetzt folgendes aus den Posts mitgenommen:

- Objekt Rechteck mit 1 Einem Eckpunkt und Width/Height (dann spart man sich die Prüfung ob es ein Rechteck ist).
- Für das Rotationsobjekt ein Viereck (oder dann gleich Polygon) mit einer Liste von aufeinanderfolgenden Punkten.
- Casts von (4)Polygon --> Rechteck (Kann man sauber mit TryCast lösen oder über Constructor mit Exceptions), cast von Rechteck --> Polygon ist sowieso harmlos.
- Center (nur für Rechteck) bezieht sich auf den Eckpunkt (links-oben) //edit --> wäre aber eigentlich ein AABB für den Zweck (Bitmap) sinnvoller?
- Origin bezieht sich ebenfalls auf den Eckpunkt bzw. Punkt1 bei Polygon, macht bei allen Formen Sinn.

Jetzt hätte ich noch Fragen zu den Bezeichnern:
Center brauche ich oft vom Nullpunkt aus, wie würdet ihr den sinnvoll bezeichnen (ZeroToCenter, ZeroCenter, CenterFromZero, AbsCenter etc.)?
Bei einem LineSegment, würdet ihr die beiden Punkte als A, B oder P1, P2 bezeichnen?

... und zur Skalierung betreffend den Origin: Skaliert der Origin allgemein mit? Bei Monogame skaliert er mit und bei GDI gibt es den Origin nicht da über die Eckpunkte rotiert wird.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

13

16.06.2016, 20:39

Objekt Rechteck mit 1 Einem Eckpunkt und Width/Height (dann spart man sich die Prüfung ob es ein Rechteck ist).
Kann man so machen, allerdings ist ein Origin, der nicht zwingend die obere linke Ecke sein muss, in vielen Situationen besser geeignet.
Für das Rotationsobjekt ein Viereck (oder dann gleich Polygon) mit einer Liste von aufeinanderfolgenden Punkten.
Ein rotiertes Rechteck sollte ein rotiertes Rechteck sein, also ein Rechteck, welches zusätzlich einen Winkel speichert, um wie viel es um den Origin rotiert wurde.
Origin bezieht sich ebenfalls auf den Eckpunkt bzw. Punkt1 bei Polygon, macht bei allen Formen Sinn.
Einerseits: bei Polygonen macht das nicht unbedingt Sinn: wenn ein Stern seine erste Ecke nicht an der Spitze eines der Zacken hat, verhält sich das Polygon, als bspw. gleichseitige Vielecke. Wie schon geschrieben, kann man mit Rechtecken mit einem Origin an der linken oberen Ecke arbeiten, es kann aber günstiger sein, den Origin in der Mitte (horizontal und vertikal) des Rechtecks oder unten mittig am Rechteck zu haben, abhängig vom Anwendungsfall.

Center brauche ich oft vom Nullpunkt aus, [...]
was genau meinst du damit?
Bei einem LineSegment, würdet ihr die beiden Punkte als A, B oder P1, P2 bezeichnen?
Das ist Geschmackssache, beides ist grundsätzlich möglich.

Skaliert der Origin allgemein mit?
Kommt darauf an, was du unter "mitskalieren" verstehst. In den meisten Umgebungen definiert man den Origin relativ anhand der Ausmaße (bspw. bei Sprites), oder man hat ein Polygon, bei dem die Position der Punkte sich auf den Origin bezieht.
In gewisser Weise würde ich sagen: nein, der Origin skaliert nicht mit (also er verändert sich nicht, wenn man eine Skalierung anwendet).

Du solltest dir aber nur über Dinge den Kopf zerbrechen, die du auch benötigst. Ich kann mir nicht vorstellen, an welchen Stellen man einen Cast zwischen Viereck und Polygon benötigen würde, wo also ein Objekt vom Typ Polygon in ein Objekt vom Typ Viereck oder andersrum umgewandelt werden würde.



@BlueCobold:
Auch nach deinen Ausführungen, klingt dein
... was wir hier ja nicht tun, weil wir über Rechtecke reden. Bitte keine utopischen Diskussionen über Dinge führen, die nicht gefragt sind. "You ain't gonna need it" gilt auch hier.
für mich noch immer danach, als seien andere Formen als Vierecke (also beliebige Vierecke, Dreiecke, Polygone, ...) für das aktuelle Thema ("Eckpunkte in einem Rechteck") nicht relevant.
Wir haben beide in unseren Ausführungen uns nicht ausschließlich auf Rechtecke bezogen (unabhängig von "mitte" und "oben links"), aber dennoch scheinst du einen Unterschied zu sehen, den ich nicht sehe.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

14

16.06.2016, 21:48

Ich habe jetzt mehrfach versucht Dir klar zu machen, dass Du verschiedene meiner Aussagen aus dem Kontext heraus reißt und sie in einem anderen Kontext komplett falsch interpretierst. Ich versuche es daher nicht noch einmal. Falls es Dir so wichtig ist, mach es per PN.
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]

15

17.06.2016, 08:47

Das Rechteck ist wohl nicht geeignet, die Garantie auf rechte Winkel ist ja das Eintscheidende für diese Form. Ich verwende jetzt zwei Objekte, AABB und Quad. Quad ist einfach durch 4 Punkte definiert. Das AABB um den Rahmen der Bitmap darzustellen und das Quad nach Rotationen.

Ich kenn halt nur MonoGame das auf XNA basiert das auf DirectX basiert. In MonoGame ist es so bei der Rotation und dem Origin:
- Es gibt keine Objekte wie z.B. ein Sprite-Object, Textur, Position, Origin, Rotation und Skalierung werden der Render-Methode übergeben.
- Texturen sind AABBs.
- Von daher ist die Position immer die linke obere Ecke.
- Origin ist ein Offset ausgehend von Links-Oben.
- Gedreht wird um den Origin.
- Bei einer Skalierung verändert sich der Origin nicht, was eigentlich bedeutet er skaliert mit weil sich sonst die linke obere Ecke dazu verschieben müsste.
Aber das ist nur MonoGame das auf XNA basiert das auf DirectX basiert, wahrscheinlich ist es in DirectX völlig anders.

Der Nullpunkt ist die linke obere Ecke (0,0) von der Map. In GDI muss man alles selber machen, also Bitmap vergrößern (um die Ecken nicht abzuschneiden beim drehen), drehen um den Mittelpunkt, Skalieren, Origin skalieren und das Image auf den neuen Origin verschieben. Bei den meisten Funktionen brauch ich den Bezug zum Nullpunkt. Wünschenswert wäre eine Bezeichnung die den Unterschied von Bitmap<->Origin zu Nullpunkt<->Origin deutlich macht.

Ich bin wirklich froh über die Ratschläge, das mit dem Rechteck hätte später noch Probleme bereitet, die Aufteilung in Quad und AABB ist weitaus sauberer und sinnvoller.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

16

17.06.2016, 08:51

wahrscheinlich ist es in DirectX völlig anders
DirectX kennt überhaupt keinen Origin ;) Es kennt nur Koordinaten, wobei 0/0/0 natürlich immer der Origin ist - wie eben üblich in der Mathematik. Da braucht's auch keine AABB oder ähnlich verrückte Dinge. Die sind nämlich alle implizit definiert durch die Koordinaten des Quads.
Beispiele (Koordinaten-System der Mathematik entsprechend [x,y,z], x link->rechts, y unten->oben, z hinten->vorn):
[[-1,-1,0],[1,-1,0],[1,1,0],[-1,1,0]] <-- Quad mit "Origin" in der Mitte
[[0,0,0],[2,0,0],[2,2,0],[0,2,0]] <-- Quad mit "Origin links oben"
[[0,0,0],[1,1,0],[5,1,0],[6,0,0]] <-- Trapez mit "Origin links unten"
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]

Werbeanzeige