3D Heightmapscripts - Berechnung mit 2 Polys

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 3D Heightmapscripts - Berechnung mit 2 Polys

    Abend,

    ich arbeite gerade an einem Heightmap Script für eine 3D Landschaft, die aus Einzelteilen besteht,
    da zusammenhängende Modelle nicht so einfach zu handhaben sind.
    Es gibt bei jedem Bestandteil immer 2 Polys, also von oben betrachtet ist es ein Quadrat.

    Nun zur Berechnung:

    Es gibt 3 wesentliche Teile, die alle 2000x2000 Groß sind.
    Sie gehen also von -1000 bis 1000 auf der x- und auf der y-Achse.
    (Rot: Der Punkt liegt auf Z 128, Schwarz: Der Punkt liegt auf 0)

    Teil 1 (Für den habe ich schon die Formel, war ja auch nicht so schwer.):


    Formel für die Berechnung der Z Koordinate vom Spieler:

    GML-Quellcode

    1. ((point_distance(0,obj_player.y,0,MittelpunktDesTeilsY*2000+1000 )/2000)*128)


    Die Multiplikation von MittelpunktDesTeilsY mit 2000 kommt daher, das die Koordinaten aus dem Grid stammen und
    in den Maßstab der Spielerkoordinaten umgesetzt werden müssen. (Also jede Zelle im Grid ist ein Teil, also 2000x2000 groß)

    Teil 2:


    Teil 3:



    Bei den anderen beiden verstehe ich nicht, wie man das am besten macht, da man hier
    nicht nur mit einer Achse rechnen muss, sondern auch die andere miteinbeziehen muss.

    Die Möglichkeit aus einem Sprite die Höhe ablesen zulassen finde ich nicht so gut, da ich das
    auf 2000x2000 strecken müsste und wenn dann noch 40+ andere "Personen" rumlaufen, dann
    haben die meisten PCs schon verloren.

    Ich hoffe ihr könnt mir helfen.

    ._.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Shapow () aus folgendem Grund: Satzbau und so

  • Nimm doch den z wert aus dem Grid.
    Zufällieger weise habe ich das gestern auch gemacht. Die ganze höhen map ist bei mir in einem ds_grid gespeichert für die landschaft generation.
    Nun must du die Spieler Posisiton umrechnen in eine grid Koordnate ind kannst so dem spieler die Boden höhe geben.
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • Also das musst du mir jetzt erklären wie ich das genau machen muss bei Teil 2 und 3.
    Ich habe keine Blockwelt falls du das meinst (Ist ja oben auch erklärt).
    Natürlich gibt es zugrundeliegende Z-Koordinaten für jede Ebene, allerdings sind diese
    Ebenen ja auch miteinander durch "Hänge" verbunden, welche oben dargestellt sind in der
    Topdownansicht mit Legende.

    Also könntest du mir bitte genauer erklären wie deine Vorgehensweise wäre?
  • Das mit den hängen ist in der tat schwer. Daran muss ich selber noch arbeiten. Wo bei mein gedanke sich beziehet das man zb, Wenn man seine höhen Werte in einem Grid hat sich einfach einen Durchschnitts wert der umliegenden Höhen nimmt. das ist zwar auch nicht Perfekt aber würde halb wegs gehen.

    Um das Grundelgende System bei mir zu erklären muss ich etwas aus holen.
    Meine 3d map besteht aus Vertexen. Genau wie bei dir.
    Nun habe ich eine 256*256 Schwarz-weiß höhen map die ich mir in eine txt Datei umwandel.
    Dies lade ich dann mit dem Spiel in eine ds_grid 256*256 am spielanfang rein.
    Daraus generiere ich mir dann die Landschaft.
    Wobei das grid die z werte für die 3 Ecke enthält.

    Jedes Vertex ist 16². Da es 256*256 grids sind ist mein level also 4096*4096 groß.
    Nun mach ich mit der playerx und y pos mir das grid daraus errechnen.

    GML-Quellcode

    1. xx = floor(x/16)*16 + 8;
    2. yy = floor(y/16)*16 + 8;
    3. x1=(xx-8)/16
    4. y1=(yy-8)/16
    5. z_ground=ds_grid_get(obj_world.level_grid,x1,y1)

    Beispeil. Wenn der Spieler in der Map mitt steh kommt dann, je nach runndung x1=128,y1=128 im grid heraus. Das ist die Boden höhe.

    Wie gesagt ich hänge auch gerade an was ähnlichem.
    Das springen lasse ich mal außen vor.

    Anwendungs beispiel. Unterwaser welt.
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • Oh, das ist wirklich eine gute Idee.
    Ich werde mal sehen, ob das mit dem Grid klappt.
    Danke (:

    EDIT: Es scheint zu funktionieren, zwar muss ich an der Genauigkeit noch
    feilen, jedoch denke ich, dass das kein Problem darstellt.
    Gelöst, danke nochmal.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Shapow ()