map generator

mulcher

Mitglied
hey liebe comunity!
als erstes wollte ich sagen das ich neu hier bin!
dann wollte ich mal meine etwas (meiner meinung nach) schwere aufgabe erkären! allerdings muss ich etwas aushohlen was meinem vorhaben angeht :)

also, der ein oder andere kennt vlt minecraft! ich hab mir da gedacht, weil ich jetzt schon fast 2 jahre MC spiele und seit einem halben jahr nun (mehr oder weniger ) java lerne und programmiere ( ^ ala "try and error " :) ), das ich doch eine "art" minecraft mit anderen inhalten machen könnte ... hmm natürlich nicht nachmachen sondern mit meinen ideen etc!
-egal das ist ja nur das vorhaben!

zum eigentlichen teil!
ich will mir einen map generator machen, der eine art 3d gitter ist(x/y/z) wo jeder punkt
eine gerade zahl ist und jeder punkt soll dann einen block darstellen( der punkt bekommt eine ID welche dann einen bestimmten block darstellt)! den block hab ich schon , ich will quasi das der block in dem raster angezeigt wird!
blos wie mache ich das raster, das es mit den ID´s gespeichert wird um es später abzurufen oder ID zu ändern und wie mache ich das der block auch angezeigt wird?
und wie sieht das mit der performace aus wenn da plötzlich 1000000 quadrate sind?!
ich habe da an arrays gedacht aber ich weis nicht wie ich das dann machen soll :noe:

kann mir da jmd helfen? danke schonmal im vorraus!

ps: ich benutzte die LWJGL (vlt hilft das ja weiter)
 

Fu3L

Top Contributor
Wenn du > 10.000 Objekte in einer Szene hast, hast du ein Problem. Wenn du aber die Blöcke in einem Mesh zusammenfasst, dann geht das mit so vielen.

In meinem Spiel erzeuge ich ein solches Mesh, belasse aber auch eine Repräsentation der Chunk Daten (ein Chunk ist eine "Säule" von Blöcken) als Array im Speicher. Das ist ein int Array, einige bits nutze ich für die ID, wie bei dir, andere wiederrum als Anzeichen, welche Seiten des Cubes gerendert werden müssen (schwer zu berechnen, wenn man außerhalb des Generators ist). Andere bits sind frei für weitere Informationen, die noch folgen könnten.
Mit reinem LWJGL kann ich dir nicht besonders helfen, ich nutze die jMonkeyEngine, die LWJGL noch weiter abstrahiert.

Ich verstehe nicht, was "jeder Punkt ist eine gerade Zahl" heißen soll?
 

mulcher

Mitglied
ja danke erstmal für die antwort!
hmm das mit dem punkt meine ich so, das keine blöcke an zb 50,239 coord entstehen (also int)!
und das mit den meshes, weis das einer wie das geht? sonst hätte ich evtl versuch das so zu machen, das jeder block abgefragt wird ob an seinen seiten ein weitererblock ist! wenn alle seiten verdeckt sind wird er nicht gerendert! (wenn das den so möglich ist!)
 

Fu3L

Top Contributor
Also meinst du an allen "ganzen Punkten" ;)
Letzterer Gedanke ist schonmal gut, bringt dich aber auch nicht viel weiter, was die Anzahl der Objekte angeht. In jME wird ein Mesh durch einen Vertexbuffer und verschiedene weitere Buffer beschrieben. Ich denke, das müsste in etwa auch das sein, was man in LWJGL direkt an die Grafikkarte schieben kann. Aber das können Marco und Fancy sicher besser als ich^^

Es ist jedenfalls eher zweitranging wie viele Punkte du hast oder wie viele Dreiecke, sondern am wichtigsten ist es erst die Anzahl der Objekte zu reduzieren, man fasst also die Punkte (Vertices) und die daraus gebildeten Dreiecke zu einem großen Objekt zusammen. Wird ein Block abgebaut, muss man dieses zwar neu berechnen, aber da führt kein Weg drumrum.
 

mulcher

Mitglied
hmm also die blöcke zu einem mesh machen? öhm giebts da eine anleitung oder ein weg wie man das macht? sry mit lwjgl bin ich etwas neu ...
und noch was mit der performance, wenn ich die map betrete! (also wenn man eine neu map startet, soll sie erst komplett generiert werden und dann gespeichert werden, dann erst wieder laden zum betreten)
wie mache ich das dann am besten wenn das nur eine bestimter teil gerendert wird? also wen möglich ohne "chunks"! geht das mit
Code:
GLU.gluPerspective
und die sichtweite dann einstellen?
 

Fu3L

Top Contributor
Wenn deine Welt unendlich groß sein soll, wirst du um Chunks nicht herumkommen^^ Und seis, dass ein Chunk 1x1xhöhe Blocks enthält... Allerdings würde das schon wieder das Mesh generieren erschweren. Du musst dir ja Gedanken machen, wie du deine Daten vorhalten willst und da wirst du sehr bald merken, dass es ohne Chunks sehr schwer wird. Nicht umsonst nutzen alle bekannten Block-Spiele Chunks.

Sollte die Welt aber begrenzt groß sein und in den Hauptspeicher passen, wäre das schon eher eine Alternative. Hängt davon ab, was du machen willst.
 

mulcher

Mitglied
erstmal soll sie ja in zb 100.000.000 blöcke die länge und breite beschränkt sein! (zwar dann ein viereck, aber evtl würde ich es auch so machen das wenn man am einen ende ist beim anderen gegenüber rauskommt :) )
und wenn mann dann nicht um chunks rum kommt, wie mache ich die?! bzw eine "chunk-mesh" ?
 

Ähnliche Java Themen


Oben