d3d (-vertex??-) Modell zu Laufzeit erstellen und ändern

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

  • d3d (-vertex??-) Modell zu Laufzeit erstellen und ändern

    Hey ho ^^
    Ich habe ein einfaches grid (ds_grid_create).
    Jetzt möchte ich in meinem Level eine Kleine Plattform haben (Mit Größen des Grids).
    Ich habe mir das so vorgestellt, dass im Draw-Event des Plattform-Objektes jede Koordinate im Grid durchgeht.
    An jeder Stelle des Grids steht die Höhe eines Punktes.
    Und für jeden Punkt wird ein 3d-Punkt mit der aktuellen Höhe gezeichnet..
    Also beispielsweise so:

    GML-Quellcode

    1. d3d_primitive_begin(pr_trianglelist);
    2. for(xx=0;xx<50;xx+=1)
    3. {
    4. for(yy=0;yy<50;yy+=1)
    5. {
    6. zz=ds_grid_get(grid,xx,yy);
    7. d3d_vertex(x+xx,y+yy,z+zz);
    8. }
    9. }
    10. d3d_primitive_end();

    Das funktioniert aber nicht..

    Ich hoffe ihr versteht mein Problem.. (ist ziemlich schwer zu erklären. :( )
    Ich denke, das dürfte so ein ähnliches Prinzip sein, wie das eines 3d Leveleditors, oder?

    LG
    -Tobi


    PS:
    Hat jemand einen Link, wo erklärt wird, wie man die 2d-Mauskoordinaten in den 3d-Raum umrechnet?
    Ich weiß dass es hier sowas schonmal gab (ich hab mich glaub ich sogar selbst mit eingemischt ^^ ) aber ich finds einfach nicht mehr. :(
  • hey. danke für de antwort :D

    Aber das ist es nicht.
    Also ich will eine Platte erstellen, bei der mit den Maßen 200px*200px*1px für jeden Pixel die Höhe einzeln bestimmen können.
    Die Höhe wird dafür einfach aus einem Grid ausgelsen (ist ja kein Problem).
    Nur das erstellen des Models will irgendwie nicht.

    LG
    -Tobi
  • Warum machst du es nicht einfach so:

    GML-Quellcode

    1. for(xx=0;xx<50;xx+=1)
    2. {
    3. for(yy=0;yy<50;yy+=1)
    4. {
    5. zz=ds_grid_get(grid,xx,yy);
    6. d3d_draw_block((xx*200),(yy*200),zz,(xx*200)+200,(yy*200)+200,zz2,background_get_texture(deine_textur_bzw_background),false,false); /*Die beiden false (plural ???) geben an , ob die Textur gestreckt werden soll, oder ob sie wiederholt werden soll - (einmal auf der x und einmal auf der y achse). false bedeutet es wird gestreckt/gezerrt.*/
    7. }
    8. }
  • okay danke..
    Also mit den Standart 3D-Funktionen kenne ich mich auch aus :P
    Ist ja auch nicht gerade schwer :D
    Nur mit den Model-Funktionen nicht so.
    Ich wollte aber nicht 2500 200px*200px große Blöcke ;)
    Wenn dann müsste jeder 1*1 groß sein. ^^
    Naja hast mich damit auf eine Idee gebracht. :)

    Eine Frage noch:
    Wenn ich jetzt 10.000 Blöcke (100*100) zeichne (und das in jedem jedes mal im Draw-Event neu) müsste die fps ja richtig schön in den Keller gehen.
    Also ich hab mir das so vorgestellt, dass ich ein Model habe, dass im Draw Event immer neu erstellt wird.
    Immer aus den Daten des Grid.

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

  • Ich denke, was er will ist, in einem Grid eine Heightmap zu erschaffen und dann auf den gegebene Höhen des Grids entsprechend Polygone malen, um ein Terrain zu schaffen, mit höhen und Tiefen, entsprechend der Werte im Grid.

    Ich schau mich mal in die Modellfunktionen, wenn ich was rausfinde, sag ich nochmal bescheid.

    EDIT1: d3d_model_vertex_normal_texture() versuchs damit mal, ich bin noch am schauen, aber das war mein erster Treffer

    EDIT2: Von Bedeutung dürften sein:

    Spoiler anzeigen
    Modell Erschaffen. Das brauchst du als erstes um irgendwo anzufangen.
    d3d_model_create() Creates a new model and returns its index. This index is used in all other functions dealing with models.
    Hiermit fängst du an, das Modell zu "bauen":
    d3d_model_primitive_begin(ind,kind) Adds a 3D primitive to the model of the indicated kind: pr_pointlist, pr_linelist, pr_linestrip,pr_trianglelist,pr_trianglestrip or pr_trianglefan.
    Die "Vertex" Funktionen. Um einzelne Kanten hinzuzufügen. Bedenke, immer 3 für ein 3-Eck.
    d3d_model_vertex(ind,x,y,z) Add vertex (x,y,z) to the model.
    d3d_model_vertex_color(ind,x,y,z,col,alpha) Add vertex (x,y,z) to the model, with its own color and alpha value.
    d3d_model_vertex_texture(ind,x,y,z,xtex,ytex) Add vertex (x,y,z) to the model with position (xtex,ytex) in the texture.
    d3d_model_vertex_texture_color(ind,x,y,z,xtex,ytex,col,alpha) Add vertex (x,y,z) to the model with texture and color values.
    d3d_model_vertex_normal(ind,x,y,z,nx,ny,nz) Add vertex (x,y,z) to the model, with normal vector (nx,ny,nz).
    d3d_model_vertex_normal_color(ind,x,y,z,nx,ny,nz,col,alpha) Add vertex (x,y,z) to the model, with normal vector (nx,ny,nz), and with its own color and alpha value.
    d3d_model_vertex_normal_texture(ind,x,y,z,nx,ny,nz,xtex,ytex) Add vertex (x,y,z) to the model, with normal vector (nx,ny,nz), with texture position.
    d3d_model_vertex_normal_texture_color(ind,x,y,z,nx,ny,nz,xtex,ytex,col,alpha) Add vertex (x,y,z) to the model, with normal vector (nx,ny,nz), with texture and color values.
    Das Modell abschliessen.
    d3d_model_primitive_end(ind) End the description of the primitive in the model.
    Hier nochmal die Beschreibungen der Typen (TriangleList und co.):
    Advanced Drawing Functions

    - pr_pointlist The vertices are a set of points.
    - pr_linelist The vertices are a set of line segments. Each pair of vertices forms a line segment. So there must be an even set of vertices.
    - pr_linestrip The vertices form a polyline with the first connected to the second, the second to the third, etc. The last one is not connected to the first one. You have to specify an extra copy of the first vertex for this.
    - pr_trianglelist The vertices are a set of triangles. Each triple of vertices forms a triangle. So the number of vertices must be a multiple of 3.
    - pr_trianglestrip The vertices again form triangles but this time it works slightly different. The first three form the first triangle. The last two of these vertices, together with the next vertex, form the second triangle, etc. So each new vertex specifies a new triangle, connected to the previous one.
    - pr_trianglefan Similar to a triangle list but this time the first vertex is part of all the triangles. Again, each new vertex specifies a new triangle, connected to the previous vertex and the first vertex.

    EDIT3: Sehr viele Zitate, aber man kann es erkennen ;)

    EDIT4: Ich hab ein nettes Script zum erstellen von Modellen von Moolt, er hats nich geschrieben, ich hab keine Ahnung woher es kommt etc. wenn du es haben wollst um dir inspiration zu holen, frag Moolt mal =P
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Schattenphoenix ()

  • Jaa genau das meinte ich.
    Mirs ist das Wort "heightmap" nicht eingefallen :rolleyes:

    (soll nur kein Terrain werden, aber sonst stimmts =D)

    Danke :thumbsup:

    ich werds mal ausprobieren


    €dit:
    Ich hab das mal versucht, aber ich kapiere das nicht :(
    Ich bekomme kein vernünftiges Model hin..
    Ich gehe mal davon aus, dass ich pr_trianglelist nehmen muss (so ist es bei den von obj in d3d Modeln auch).
    Und dann weiß ich nicht wie ich die vertex setzten muss.
    Also in der Hilfe steht die Zahl der vertex verdreifacht sich, da immer 3 Punkte ein Dreieck bilden.
    Aber ich weiß nicht, wie und wo ich die Punkte dann setzen muss.
    Kann man mir das vllt. jemand erklären?

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

  • Vertices sind hier die Punkte glaube ich.

    Du malst also von einem Punkt 2 Vertices zu den anliegenden punkten um ein 3Eck zu malen.

    Ich denk mir mal bissl was aus, wie man das machen kann, um die Heightmap zu malen.
    Edith geht hier rein =P

    EDITH: Here we go...
    Probiers mal mit d3d_model_draw oder so.
    Dateien
    • createmod.txt

      (859 Byte, 150 mal heruntergeladen, zuletzt: )
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Schattenphoenix ()

  • Wie siehts aus, irgendwelche Erfolge?
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Tobi schrieb:

    Nee eher weniger.
    Hab mal ein Beispiel mit hochgeladen.
    Weil das sieht etwas komisch aus mit deinem Quelltext.
    Naja kannst du dir ja mal angucken.
    Thx.


    Sieht ja schon fast richtig aus...

    Änder mal dein Create-Event vom Modellobjekt in das hier zum testen:

    Spoiler anzeigen

    GML-Quellcode

    1. for(a=0;a<=10;a+=1)
    2. {
    3. a2=a;
    4. for(b=0;b<=10;b+=1)
    5. {
    6. b2=b;
    7. grid[a2,b2]=random(20)-10;
    8. }
    9. }
    10. var xx, yy;
    11. m=d3d_model_create();
    12. d3d_model_primitive_begin(m,pr_trianglelist);
    13. for(a=0;a<10;a+=1)
    14. {
    15. xx=a;
    16. for(b=0;b<10;b+=1)
    17. {
    18. yy=b;
    19. for(i=0;i<2;i+=1)
    20. {
    21. switch(i)
    22. {
    23. case 0:
    24. {
    25. d3d_model_vertex(m,xx*36,yy*36,grid[xx,yy]);
    26. d3d_model_vertex(m,(xx+1)*36,yy*36,grid[xx+1,yy]);
    27. d3d_model_vertex(m,(xx+1)*36,(yy+1)*36,grid[xx+1,yy+1]);
    28. break;
    29. }
    30. case 1:
    31. {
    32. d3d_model_vertex(m,xx*36,yy*36,grid[xx,yy]);
    33. d3d_model_vertex(m,xx*36,(yy+1)*36,grid[xx,yy+1]);
    34. d3d_model_vertex(m,(xx+1)*36,(yy+1)*36,grid[xx+1,yy+1]);
    35. break;
    36. }
    37. }
    38. }
    39. }
    40. }
    41. d3d_model_primitive_end(m);
    Alles anzeigen



    PS: Ich hab auch schon ne Idee, das Movement dazu zu realisieren, aber dazu mehr, wenn du es hingekriegt hast ;)
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet
  • Danke Danke Danke
    :thumbsup: :thumbsup: :thumbsup:

    Funktioniert perfekt :'D


    Soo okay.. was war mit MoveMent?^^

    Aber vorher noch eine Frage.
    Der Terrain sollte eigendlich die Textur haben, die ich ja mit "background_get_textur(background0)" angegeben hab.
    Er ist aber komplett schwarz.
    Was muss ich ändern?

    LG
    -iBot
  • Tobi schrieb:

    Danke Danke Danke
    :thumbsup: :thumbsup: :thumbsup:

    Funktioniert perfekt :'D


    Soo okay.. was war mit MoveMent?^^

    Aber vorher noch eine Frage.
    Der Terrain sollte eigendlich die Textur haben, die ich ja mit "background_get_textur(background0)" angegeben hab.
    Er ist aber komplett schwarz.
    Was muss ich ändern?

    LG
    -iBot


    Wegen der Textur frag mal Moolt, der kennt sich da besser aus.
    Bei Modellen kenn ich mich da nich so aus.
    Wahrscheinlich musst du dann die Vertizen mit Textur direkt angeben, es gibt glaube ne spezielle Funktion. Da gibst du denn TexCoords ein und es sollte klappen.

    Ausserdem pass auf, dass du das Modell nich zu groß machst.
    1000Polygone gehen normalerweise glaube ich. Danach musst du ein neues Modell machen.

    Mit dem Movement.
    Ich denke, am sinnvollsten ist es, den Abschnitt zu suchen, in dem man sich befindet.
    Daraus kann man mithilfe von Trigonometrie und co. die Höhe des Bodens genau ausrechnen.
    Wenn du genaueres brauchst, sollten wir das vllt in nem anderem Thread machen oder per PN/IM

    EDIT: Wegen dem Kram mit der Textur hab ich mal nachgeschaut. Ich kriegs nicht 100%ig hin, weil mir 3 Werte fehlen.
    Im Anhang hab ich mal das, was ich bisher habe. Ich hoffe die "Level-Datei" ist euch nich zu groß. Wenn doch, macht mit dem Conv Pic2Map ein neues (einfach ein Bild laden, der Rest geht automatisch - Achtung, NICHT ZU GROß!)
    Was mir fehlt sind die x, y und z-Vektoren der Polygone. Ich brauch also die Richtung, in die das 3Eck abstrahlt, um die richtige Beleuchtung hinzukriegen. Da es mir derzeit noch nicht gelungen ist, diese zu berechnen... geb ich euch das erstmal, vielleicht könnt ihr was hinkriegen.

    Desweiteren hab ich, für Interessenten einen Anhang dran getan, der Bilder in ein passendes Array für die Terrain.gmk umwandelt. Es ist nicht optimiert (er speichert jeweils "grid[xx,yy]=zz;") aber funktioniert soweit ich es weiss, ohne Fehler.
    Dateien
    • Terrain.rar

      (802,87 kB, 142 mal heruntergeladen, zuletzt: )
    • Conv Pic2Map.rar

      (10,04 kB, 143 mal heruntergeladen, zuletzt: )
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Schattenphoenix ()

  • SDX und ich beschäftigen uns grad etwas intensiver damit, wenns gut läuft, fangen wir ein Projekt auf der Basis an.

    PS: Bewegung haben wir, SDX schlägt sich gut ;)
    So far, Schattenphoenix~
    _____________________________________________________________________________
    "Who needs a stairway to heaven...
    If there is an elevator to hell... ?
    "
    - Vergessen
    "Auch ein perfektes Chaos ist etwas vollkommenes."
    - Jean Genet