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

1

02.09.2010, 11:36

Objekte auseinander ziehen

Hallo,
ich bin neu in der 3D-Programmierung (opengl) und habe mal eine Frage. Ich habe einige Gegenstände in der Szene platziert, wobei es vorkommen kann, dass die Objekte zu dicht beieinander sind. Nun möchte ich diese Gegenstände z.B. mit einem slider "auseinander" ziehen, sodass gewisse Abstände zwischen ihnen entstehen. Es soll quasi wie bei einer Explosion sein, bei der von einem bestimmten Zeitpunkt eine Momentaufnahme stattgefunden hat.. Dies kann für mich sinnvoll sein, um beispielsweise so ein Gebilde (das aus einzelnen voneinander unabhängigen Komponenten besteht)


(Link)


durch geeignete Verschiebung aller oder den einigen Objekten zu solch einem Konstrukt zu machen:



(Link)

(Quelle: http://www.cumschmidt.de/sm_sf6.htm)

Ich dachte mir als naiver und unerfahrender, dass ich eine Kugel um meine gesamte Szene lege, sodass alle Objekte in dieser Kugel sind. Dann verschiebe ich diese Objekte entlang einer Gerade, die durch den Ursprung der Kugel und dem Objektmittelpunkt gebildet wird. Der Verschiebungswert ist proportional zur Entfernung des Objektes zum Kugelmittelpunkt, d.h. je weiter weg das Objekt, desto stärker die Verschiebung entlang der Geraden.

(Link)


Ich weiß nicht wie sinnvoll oder sinnlos mein oben beschriebener Ansatz ist. Deshalb frage ich euch mal, ob ihr eine bessere Idee habt oder sogar schon bekannte Algorithmen für dieses Problem kennt?

Grüße 8o

2

02.09.2010, 12:19

hört sich finde ich vernünftig an, nur brauchst du die kugel eigentlich nicht sondern nur den mittelpunkt. berechne für alle objekte den (normalisierten) richtungsvektor der von dem mittelpunkt zum jew. objektmittelpunkt führt. möchtest du den abstand der objekte zum mittelpunkt nun erhöhen kannst du die richtungsvektoren mit einem wert skalieren und auf die objektpositionen addieren.
den mittelpunkt der objektgruppe kannst du einfach mit der bildung des durchschnitts der objektpositionen erhalten.

hanse

Alter Hase

Beiträge: 472

Wohnort: Wien

  • Private Nachricht senden

3

02.09.2010, 14:17

Was ist die Skalierung eines normalen Objektes? Genau, dass auseinander ziehen der Vertizen. Es sollte also reichen wenn du die Mittelpunkte mit einer Skalierungsmatrix multiplizierst.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »hanse« (08.09.2010, 12:49)


4

07.09.2010, 23:20

Zitat

berechne für alle objekte den (normalisierten) richtungsvektor der von dem mittelpunkt zum jew. objektmittelpunkt führt. möchtest du den abstand der objekte zum mittelpunkt nun erhöhen kannst du die richtungsvektoren mit einem wert skalieren und auf die objektpositionen addieren.

Das hört sich nicht schlech an! Muss ich die Koordinaten wirklich auf die ursprünglichen Objektpositionen hinzuaddieren oder kann ich irgendwie eine Matrix benutzen? Wenn ja, welche wäre dies. Mit einer normalen Verschiebungsmatrix gäbe es wohl Probleme..
Ein Gegenstand, auf dem der Mittelpunkt der Objekte genau liegt soll nicht verschoben werden. Wie könnte ich das realisieren?


grüße :)

Werbeanzeige