Sprite verzerrt zeichen

  • GM 8
  • Sprite verzerrt zeichen

    Hallo,

    ich will für mein aktuelles Projekt ein Sprite verzerrt zeichen lassen
    Dafür habe ich diesen Code verwendet(der Sprite ist 32x32 Pixel):

    GML-Quellcode

    1. //im create-event:
    2. text = sprite_get_texture(sprite_index,0)
    3. //im draw-event:
    4. draw_primitive_begin_texture(pr_pointlist,text)
    5. draw_vertex_texture(xx1+16,yy1+32,0,0)
    6. draw_vertex_texture(xx1+16+32,yy1+32,1,0)
    7. draw_vertex_texture(xx2+16,yy2,0,1)
    8. draw_vertex_texture(xx2+16+32,yy2,1,1)
    9. draw_primitive_end()


    es wird aber nichts gezeichnet.
    Ich kenne mich mit draw_primitive_... über haupt nicht aus.
    Was mache ich hier falsch?

    FG
    andre111
  • xx1/2 und yy1/2 sind positionen im Raum:
    z.B:
    xx1 = 240
    yy1 = 160
    xx2 = 240
    yy2 = 208

    edit: ich weiß hier wäre alles gerade, die x werte können sich allerding um +-16 verschieben

    edit 2: habe jetzt pr_trianglelist benutzt und jetzt funktoniert es halb. Es wird an den oberen Punkten richtig gezeichnet, aber unten ist der sprite in einem Punkt vereint. So das es ein Dreieck ergibt.

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

  • Zur Veranschaulichung von pr_trianglefan pr_trianglestrip:


    Es verbindet die ersten drei Vertices zu einem Dreieck und der nächste Vertex bildet dann mit den vorherigen beiden Vertices das nächste Dreieck usw.
    Das kannst du hier verwenden (da der GM leider kein pr_quads hat).

    (pr_trianglelist verbindet jeweils drei Punkte zu einem Dreieck -> mit pr_trianglefan pr_trianglestrip hat man hier ein Ersparnis von 2 Vertices)

    Falls es noch Fragen gibt, einfach fragen.
    8|

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

  • So weit ich das verstehe sollte das dann doch das Sprite verzerrt zeichnen:

    GML-Quellcode

    1. draw_primitive_begin_texture(pr_trianglelist,text)
    2. draw_vertex_texture(xx1,yy1+32,0,0)
    3. draw_vertex_texture(xx1+16,yy1+32,1,0)
    4. draw_vertex_texture(xx2,yy2,0,1)
    5. draw_vertex_texture(xx2+16,yy2,1,1)
    6. draw_primitive_end()

    und nicht als Dreieck

    edit: bei Tobi97s Zeichnung fehlt also das untere Dreieck.

    edit 2: oh hatte nicht gesehen das es bei ihm pr_trianglefan ist, funktioniert damit aber auch nicht.
    (lade gleich ne Zeichung hoch)

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

  • Du hast als kind pr_trianglelist angegeben, du musst allerdings für meine Methode pr_trianglefan pr_trianglestrip nehmen.
    Außerdem musst du auf die Reihenfolge, mit der du die Vertices angibst aufpassen.
    Erst oben links, dann oben rechts, dann unten links und dann unten rechts (Es dürfe auch anders gehen, aber so mach ich's immer).

    - Tobi97
    8|

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

  • Habe jetzt pr_trianglefan mitr diesem code genommen(Reihenfolge sollte richtig sein?)

    GML-Quellcode

    1. draw_primitive_begin_texture(pr_trianglefan,text)
    2. draw_vertex_texture(xx1,yy1+32,0,0)
    3. draw_vertex_texture(xx1+16,yy1+32,1,0)
    4. draw_vertex_texture(xx2,yy2,0,1)
    5. draw_vertex_texture(xx2+16,yy2,1,1)
    6. draw_primitive_end()

    dabei kommt das raus:
  • Vertausche mal den ersten und den zweiten Vertex.
    Sieht danach aus, als hättest du oben rechts angefangen, dann oben links, dann unten links und dann unten rechts (aus dem Bild entnommen, mit deinen Koordinaten komm ich ned wirklich klar ^^ )

    edit: Oh Gott, sry, hab trianglefan mit trianglestrip vertrauscht. Änder das mal bitte um.

    - Tobi97
    8|
  • ok, habe es anders herum, aber es war zu erst links dann rechts.
    Jetzt ist die reihenfolge:
    oben rechts
    oben links
    unten links
    unten rechts

    edit: ok mit trianglestrip gehts auch, dann mit der Reihenfolge:
    oben links
    oben rechts
    unten links
    unten rechts

    Danke, auf jeden fall funktioniert es jetzt.
  • Benutzer online 1

    1 Besucher