GM:S vertex texture durcheinander

  • GM:S vertex texture durcheinander

    Guten Morgen,

    gerade sitze ich daran eine ds_grid, gefüllt mit vertex Koordinaten zu zeichnen. Die Grid soll dabei ein Chunk repräsentieren. Zur Fehlereingrenzung besteht das Chunk nur aus 4 Vertexen und einer Textur, die zusammen ein Quadrat darstellen sollen:

    xx
    yy
    zz
    tx
    ty
    t
    0
    0
    0
    0
    0
    sGrass
    16
    0
    0
    1
    0
    sGrass
    16
    16
    0
    1
    1
    sGrass
    0
    16
    0
    0
    1
    sGrass

    Mithilfe der d3d_primitive_* und d3d_vertex_texture Funktionen, versuche das Ganze nun zu zeichnen.

    GML-Quellcode

    1. //draw chunk geometry
    2. var i, tex, xx, yy, zz, tx, ty, t;
    3. tex = sprite_get_texture(sGrass, 0)
    4. d3d_primitive_begin_texture(pr_trianglelist, tex);
    5. for(i = 0; i < ds_grid_height(geometry); i++){
    6. xx = ds_grid_get(geometry, 0, i);
    7. yy = ds_grid_get(geometry, 1, i);
    8. zz = ds_grid_get(geometry, 2, i);
    9. tx = ds_grid_get(geometry, 3, i);
    10. ty = ds_grid_get(geometry, 4, i);
    11. /*t = ds_grid_get(grid, 5, i);*/
    12. d3d_vertex_texture(xx+xversatz, yy+yversatz, zz, tx, ty);
    13. }
    14. d3d_primitive_end();
    Alles anzeigen


    Ich erhalte jedoch stark verzerrte Texturen. Da die Geometrie scheinbar richtig geladen wurde, kann ich mir nicht erklären, weshalb das Ergebnis vom hardgecodetem so stark abweicht (hardgecoded wäre 4x d3d_vertex_texture zu schreiben)


    (hier sind 9 identische Chunks á 16x16px zu sehen)
    i think, therefore 私 は.
  • push

    ich hatte zwar ein kleines durcheinander in den geometries, die sind jetzt aber in der richtigen Reihenfolge.
    Das Kernproblem besteht weiterhin. Vielleicht hat ja jemand ne Idee: 3 Vertices werden gezeichnet und mit einer Textur befüllt. 4 Sollten allerdings erstellt werden.

    GML-Quellcode

    1. //draw chunk geometry
    2. var i, tex, xx, yy, zz, tx, ty, t;
    3. tex = sprite_get_texture(asset_get_index("sGrass"), 0)
    4. d3d_primitive_begin_texture(pr_trianglelist, tex);
    5. for(i = 0; i < ds_grid_height(geometry); i++){
    6. xx = ds_grid_get(geometry, 0, i);
    7. yy = ds_grid_get(geometry, 1, i);
    8. zz = ds_grid_get(geometry, 2, i);
    9. tx = ds_grid_get(geometry, 3, i);
    10. ty = ds_grid_get(geometry, 4, i);
    11. t = ds_grid_get(geometry, 5, i);
    12. /*d3d_vertex_texture(0+xversatz, 0+yversatz, 0, 0, 0); hardgecoded gehts,
    13. d3d_vertex_texture(16+xversatz, 0+yversatz, 0, 1, 0);
    14. d3d_vertex_texture(16+xversatz, 16+yversatz, 0, 1, 1);
    15. d3d_vertex_texture(0+xversatz, 16+yversatz, 0, 0, 1);*/
    16. d3d_vertex_texture(xx+xversatz, yy+yversatz, zz, tx, ty);//so nicht
    17. tex = sprite_get_texture(asset_get_index(t), 0)
    18. }
    19. d3d_primitive_end();
    Alles anzeigen

    ohne kommentierten Code
    Kommentierter Code



    Der Schleifendurchlauf findet auch 4 mal pro Draw (0-3), mit den korrekten Positionen statt und zeichnet alle 4 vertices.

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

  • Ja weil du ja auch nur eine Punkt angegeben hast. Ein vertex ist nur ein Punkt im Raum, damit dein primitive sichtbar ist muss es aus mindestens 3 Punkten bestehen. Die Reihenfolge der Punkte die du angeben musst, findest du hier.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)