Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hi Leute ich versuche mich so schnell wie möglich in opengl einzuarbeiten und hab nur ein Problem ich möchte Kogeln um eine Kugel laufen lassen und bekomme das nicht hin . Wer kann mir helfen. Achso die Entwicklungsumgebung ist Visual C++.

Geschrieben

Ich bin zwar kein OpenGL-Experte (und weiss deshalb auch nicht, ob OpenGL von selbst schon solche Funktionen bereitstellt) aber das ganze ist trigonometrisch realitiv primitiv (alles aus dem Kopf, deshalb mit etwas Vorsicht zu geniessen ;-)):

Du willst also mehrere Kugeln um ein Zentrum kreisen lassen (zur Vereinfachung betrachte ich jetzt mal nur eine kreisende Kugel und das ganze nur im 2-dimensionalen Raum):

Die kreisende Kugel hat ja einen definierten Radius ("radius") zu ihrem Zentrum. Wenn jetzt die Kugel einen bestimmten Winkel ("alpha") einnehmen soll, dann ergibt sich folgendes (ähnlich zu betrachten wie ein Einheitskreis):

sin(alpha) = dy / radius;

cos(alpha) = dx / radius;

wobei dx und dy die jeweiligen Komponenten in x- und y-Richtung bezüglich des Zentrums angeben und durch Umstellen der obigen Formel einfach errechnet werden können:

dy = sin(alpha) * radius;

dx = cos(alpha) * radius;

Die endgültige Position für die kreisende Kugel ergibt sich dann so:

Kugel.x = Zentrum.x + dx;

Kugel.y = Zentrum.y + dy;

  • 2 Wochen später...
Geschrieben

Hallo,

bin zwar auch kein OpenGL-Experte, aber ein bisschen was habe ich schon gemacht. Die x/y-Koordinaten brauchst du überhaupt nicht zu berechnen: das macht OpenGL für dich.

-Zuerst definierst du ein Koordinaten-System und setzt eine Kugen auf Position 0/0/0.

-Dann pushst du die Transformation-Matrix auf den Stack.

-Dann drehst du das Koordinatensytem um x Grad verschiebst das Koordinatensystem (z.B. um 100 Einheiten die Z-Achse runter) und setzt eine zweite Kugel auf Position 0/0/0.

-Dann popst du die Transformation-Matrix wieder vom Stack, d.h. dein ursprüngliches Koordinatensystem ist wiederhergestellt.

Wenn du jetzt in einer Schleife für x von 0 bis 359 durchlaufen lässt, läuft die 2. Kugel um die 1. Kugel rum.

Hoffe ich hatte das noch richtig in Erinnerung.

Wenn du ein gutes Buch zu OpenGL suchst: OpenGL Superbible von Michael Sweet und Richard Wright.

Siehe auch www.opengl.org

Gruß

Peter

Geschrieben

Also ich denke es ist doch schneller, die Rotation mit der simplen Multiplikation durchzuführen. Das Matrix-Pushen und -Poppen verbraucht nämlich ZIGMAL mehr Zeit als eine simple Multiplikation (gehe ich jede Wette ein). Nur bei Grafikkarten, die die Berechnung der CPU abnehmen, könnte (eventuell) das Matrizen-Gefummel Vorteile bringen, aber ich habe noch keine Benchmarks aus diesem Bereich gesehen. Vielleicht nochmal ein saublöder Tip, der sich allerdings lohnen könnte: Die Rotation der Kugel um die Kugel wird ja in Frames ausgegeben. Wenn man mit einer Maximalen Frame-Rate von 120 Hz arbeitet und dann auch noch eine komplette Rotation auf höchsten 10 Sekunden festlegt, macht das 120*10=1200 Position. Das wäre ein irre Speicherverbrauch (hehe). Warum die paar Bytes nicht einfach als feste (vorberechnete) Tabelle ablegen? Hier gibt es 2 Möglichkeiten:

1 - die Gute) Eine Tablle mit festem Sinus. Cosinus ist dann einfach Sinus-Startposition+90 Grad oder einfach Startposition+(Gesamttabellengröße/4). Dann kann man den Radius einfach durch eine weitere Multiplikation oder eine entsprechende Projektions-Matrix vergrößern.

2 - die Schlechte) Feste Positionen in der Tabelle ablegen (bei Motion-Frames werden ja auch die Key-Frames abgelegt- kaum einer arbeitet mit Bones (Skelett-Animationen) und Zwischenframes werden dann entsprechend berechnet - aber das ist bei Kugeln ja eh kein Thema.

Also solltest Du mal vor haben 1000 Kugeln umeinander drehen zu lassen (vielleicht als Demo) dann arbeite lieber mit Tabellen, weil das einfach 100mal schneller ist als jedes Matrizen-rumschieben und immer noch 10 mal (oder mehr) schneller als Multiplikationen. Früher bei den Demos hat auch kein Schwein die FPU zum Berechnen von Sinus und Cosinus verwendet und sogar der Zentralprojektion verwendet, weil die nämlich alle mit Tabellen viel einfacher und schneller realisierbar sind.

Und was höre ich heute von jedem sogenannten Computerfachmann: Der Speicher ist heute nicht mehr das Problem! Stimmt eigentlich auch, die Frage ist nur für was, denn ich frage mich warum dann Bjarne Soutstroup in seinem Büchern dem Memory-Management (Allokatoren beispielsweise) gleich mehrere Kapitel widmet?

Man sollte nicht immer auf die fertigen Libraries wie denen von OpenGL vertrauen. Also in meinem Büchern wird sogar von einigen Funktionen konkret abgeraten z.B. 3D-Clipping. Zu Lernzwecken ist es eh immer gut vieles selbst zu machen.

Wenn es sich nur um die Rotation der zwei Objekte handelt und sonst nix zu sehen ist könnte man ja auch einfach die Kamera Rotieren!

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...