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

04.03.2013, 17:08

Kugel über unregelmäßige Ebene. Wie? Tipps?

Heyho liebes Forum


Ich beschäftige mich seit einiger Zeit mit C++ und diesen Semester haben wir uns in der Uni Anhand vom Buch "3D-Spieleprogrammierer" erstmals mit 3D Grafik und Visual Studio beschäftigt. Nun haben wir eine Die Aufgabe eine 3D Welt zu bauen in der eine Kugel über eine dreidimensionale Ebene rollt und gegen Gegenstände stößt.

Auf Grundlage von David's Programmen im Buch habe ich das soweit auch schon alles hinbekommen, und habe auch eine simple unregelmäßige Ebene in 3Ds Max gemodelt und eingebaut. Nur bei der Kollision zwischen Ebene und Ball stehe ich noch ein wenig auf dem Schlauch. Habt ihr ein paar Tipps/Stichworte womit das zu lösen ist?
Ich hatte schon ein wenig gegooglelt und öfters was von einer Heigh Map gelesen. Ist es damit zu lösen? Und wenn ja kennt ihr ein gutes Tutorial oder Seite wo erklärt wird wie diese funktionieren?


Danke im Voraus

grüße

Schnodi

Dreat

Frischling

Beiträge: 86

Wohnort: Heilbronn

  • Private Nachricht senden

2

04.03.2013, 18:18

Also ich hab nur "heightmap c++" bei google eingegeben:

1. Treffer : Youtube Video mit Code im Kommentar - OpenGL+SFML
2. Treffer : Mit DirectX11
usw...

hier nochmal -> google für dich Google
ganz ehrlich da gibts so viel...jetzt nicht böse sein aber sowas kann man mit 5 min. Aufwand selber finden.

Ob es damit zu lösen ist...weiß ich nicht aber ich geh mal stark davon aus.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

04.03.2013, 18:53

Mit einer Height Map hat das Problem wenig zu tun.
An deiner Stelle würde ich eine Physik-Engine nehmen, z.B. Bullet oder PhysX. Die machen dann auch die Kollisionserkennung für dich.

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

4

04.03.2013, 19:05

Evtl. sollst Du die aber selbst machen, wenn das Teil der Aufgabe ist. In dem Fall: nimm Dir einen Block Papier und einen Bleistift und formel mal Kugel gegen Ebene, Kugel gegen Strahl und Kugel gegen Punkt durch. Dann kannst Du einfachsten Fall linear durch alle Dreiecke, deren Kanten und Eckpunkte durchgehen und prüfen, ob Deine Kugel sie berührt oder nicht. Bei Berührung berechnest Du dann einen Gegen-Impuls und wendest den an. Das sollte als einfache Physik reichen, solange es nur um eine Kugel und ansonsten statische Geometrie geht.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

5

04.03.2013, 19:31

@Dreat. Es ging mir eben erstmal darum herauszufinden, ob eine High Map überhaupt die Richtige lösung ist. Und falls kann man dann ja trotzdem fragen ob jemand eins kennt was er besonders empfiehlt.
@Daivd: Glaube Physin Engine wäre eher contraproduktiv weil wir lernen sollen wie es geht.

@Schrompf: Bei den festen statischen Objekten habe ich das genau so(per Hand) gemacht, aber da kenne ich auch den genauen Umfang der Objekte. Bei der Ebene weiß ich das aber nicht genau.

Ich bräuchte also von jedem Punkt der Ebene auch den Höhenvektor dazu. Wahrschienlich also wirklich ne Hightmap? Die scheint mir nur extrem kompliziert zu sein... Zumindest komplizierter als alles was ich im Semster gemacht habe ^^

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

04.03.2013, 19:39

Du kannst einen Strahl (Ray) aus der Kugel raus nach unten schießen. Dann berechnest du den Kollisionspunkt des Strahls mit der Ebene. Wenn du weißt wie hoch dieser ist, weißt du wie hoch das Terrain unter der Kugel ist und kannst sie so nach oben schieben. Dadurch hast du ein sehr einfaches System welches dich auf das Terrain klebt. Alternativ kannst du hier natürlich ein wenig Physik implementieren. Für die Kollision musst du gucken, ob das Framework womit du arbeitest sowas schon unterstützt. Ansonsten kannst du ja weiter nach Ray Terrain Kollision suchen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

04.03.2013, 20:50

Wäre das Terrain nicht von Hand modelliert, sondern echt anhand einer Heighmap erstellt worden und der Radius der kugel klein im Verhältnis zu den Kantenlängen, dann wäre es sehr einfach die betroffenen Dreiecke rauszusuchen und gegen diese einen Kollisionstest durchzuführen. Für beliebige Formen ist es hingegen auch beliebig kompliziert. Ansonsten kann nachdem du erstmal die Dreieck-Kugel Kollision implementiert hast und die lineare Suche zu langsam ist, immernoch eine Aufteilung des Terrains in ein Raster deutliche Beschleunigung bedeuten.

P.S. Ein Strahl nach unten reicht vllt in vielen Fällen aus, aber je rauer das Gelände ist umso eher führt das zu unschönen effekten wie eine teilweise eintauchende Kugel bis hin zu einer Halbkugel, weil die andere Hälfte in der Wand steckt.

P.P.S: eine Heightmap ist eigentlich sehr sehr einfach zu verstehen und zu nutzen. Jeder Punkt in einer Textur gibt dir halt eine Höhenangabe. Du erstellst also n x m Vertices (Wobei n x m der Auflösung der Heightmap entsprechen kann) in gleichmäßigen x/y Abständen und die Höhe für jeden Raumpunkt/Vertex holst du dir aus der Heightmap. Vorallem kannst du die Höheninfo wiederum nutzen um ganz schnell die z Komponente für deine Kugel zu finden (wenn das Terrain flach genug ist).
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Nox« (04.03.2013, 20:57)


8

04.03.2013, 21:47

Hm ok danke an alle

Mein Terrain ist recht genau eigentlich. Ca 10k Polygone oder so hat mir 3Ds Max angezeigt.

Und ja die Theorie einer Heightmap habe ich verstanden, bei der implementierung hapert es noch. Aber ich hab ja jetzt einiges was ich probieren kann.

Werbeanzeige