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

Kevni

Frischling

  • »Kevni« ist der Autor dieses Themas

Beiträge: 13

Beruf: Azubi Anwendungsentwickler

  • Private Nachricht senden

1

12.09.2013, 13:12

Prozedurales Planetenterrain

Moin,

ich arbeite gerade an einem detailiertes Sonnensystem das ich mit Three.JS umsetzen möchte. Mein Wunsch ist es, die Planetenoberfläche beim annäheren prozedural zu generieren und auch auf der Oberfläche laufen zu können.

Ich habe leider nicht viel Erfahrung was 3D-Programmierung angeht und kann mir nicht vorstellen wie ich das umsetzen könnte.

Konkrete Frage wären:
  • Wie kann ich die Oberfläche "auf" die Sphere setzen? Auf der unten verlinkten [1] Website habe ich ein gutes Beispiel wie ich prozedurales Terrain generieren kann. Aber wie bekomme ich so etwas kugelförmig?
  • Wie mache ich das mit der Gravitation, also dass die Kamera richtig positioniert wird, egal auf welcher Position man sich auf der Kugel befindet. Mein Ansatz wäre eine richtige Gravitation umzusetzen was aber sich sehr rechenaufwändig wäre. Gibt es da schon gute Ansätze an denen ich mich orientieren könnte?
[1] http://srchea.com/blog/2012/02/terrain-g…m-and-three-js/
Ich stelle mir mein Endergebnis so vor, wie das Projekt Infinity http://www.youtube.com/watch?v=h7eREddMjt4 (natürlich nicht solch profesionellen Grafiken..).
Würde mich sehr freuen wenn mir jemand ein paar Ansätze liefern könnte.

Danke!

lg

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Kevni« (12.09.2013, 13:21)


Pilzschaf

Frischling

Beiträge: 43

Wohnort: Freiburg

  • Private Nachricht senden

2

12.09.2013, 15:50

Also wenn der Planet nur eine Kugel wäre könntest du einfach den Radius der Kugel nehmen, um die Gravitation zu erzeugen, aber da ich denke du meinst mit Oberfläche tatsächlich Felsen und ähnliches, ist das zumindest nicht so einfach Möglich, aber der Abstand zum Kugelmittelpunkt ist sehr wichtig, um diese Gravitaion zu erzeugen. So kannst du einen Richtungsvektor von deinem Charakter zum Kugelmittelpunkt speichern. Dann Beschleunigst du den Charakter (solange er nicht auf den Boden trifft) in Richtung des Richtungsvektors. Dadurch wirkt es eben wie eine echte Gravitation. Wie du das mit der Kollisionsabfrage machst hängt von der Art der "Oberfläche" zusammen. Wie du das mit der Oberfläche hinbekommst weiß ich jetzt aber auch nicht.

Zitat

"Der Code ist schon schlecht."
"Ist doch Geschmackssache."
"Naja, es sind GOTOs drin."
"Oh."

3

13.09.2013, 10:36

Du erzeugst einen Mittelpunkt (z.B. 0/0/0) und definierst einen Planetenradius r. Dann iterierst du über zwei Winkel und setzt jeweils einen Vertex bei Distanz r. Dadurch erzeugst du die (ersteinmal hügellose) Planetenoberfläche. Nun kannst du über jeden Vertex deinen Algorithmus laufen lassen, wobei du ein paar Dinge beachten musst:
- Das Feld ist ein Torus, d.h. du hast keine Grenzen und musst beachten dass die Oberfläche nahtlos passt.
- Normalerweise hast du eine x/z-Fläche, bei der du die y-Achse veränderst. Hier jedoch bist du im Polarsystem. D.h. die beiden Winkel sind für x/z verantwortlich und die z-Änderung wird auf den Radius r addiert.

Für die Kamera / Gravitation nimmst du den aktuellen Punkt, auf dem du bist (bzw. die Kamera, je nach Fall) und berechnest die Winkel zum Mittelpunkt.
Das ist deine Normale zur Fläche, d.h. in diese Richtung zieht die Gravitation bzw. diese nimmst du auch für die Positionierung der Kamera. Beachte, dass die Kamera eine andere normale als die Spielfigur hat, wenn diese nicht auf der selben Position sind (z.B. wenn die Kamera einer Figur folgt).

Alles klar?

Werbeanzeige