Das ist eine wirklich interessante Frage.
Ich denke, die Art und Weise, wie Sie dies mit Box2d tun könnten, wäre, alle Punkte in einer Art Array zu speichern und sie dann in die Polygonfunktion einzufügen.
Ich habe selbst noch nie eine Poly benutzt, aber danach zu urteilen:
/programming/4360084/creating-complex-shapes-with-box2d
Möglicherweise können Sie die Funktion createShape () verwenden.
Woran ich mich erinnere, ist, dass es definitiv eine Möglichkeit gibt, Vektoren in ein Gerät einzulesen. Die logischste Möglichkeit, dies zu tun, wäre eine Art Stapel.
Wenn Sie die Punkte bereits basierend auf Benutzereingaben erfasst haben, müssen Sie sie einfach in die box2d poly-Funktion einspeisen, ein Gerät / einen Körper oder so weiter erstellen und dann Ihrer Welt hinzufügen.
Was das Bild angeht, bin ich mir ziemlich sicher, dass Sie dies mit opengl tun können, aber ich bin mir nicht sicher, was Sie genau meinen. Wenn Sie nur möchten, dass sie eine Amöbenform zeichnen und diese dann mit einer Volltonfarbe füllen können, sollte dies einfach sein.
Wenn Sie jedoch ein vorhandenes Bild aufnehmen und es so verschieben möchten, dass es in die Form des Geräts passt, ist dies schwierig. Ich bin mir sicher, dass Sie es schaffen können. Hier ist ein Beispiel dafür, wie Blitting mit opengl aussieht (beachten Sie, dass dies in Java ist).
glPushMatrix();
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
dirPosd = i.shield.getPosition().mul(30);
glTranslatef(dirPosd.x, dirPosd.y, 0);
glRotated(Math.toDegrees(i.shield.getAngle()+52.9), 0, 0, 1);
glColor3f(1,1,1);
animationY.bind();
sizer = 40;
glBegin(GL_QUADS);
glTexCoord2f(0f, 0f);
glVertex2f( i.shield.getPosition().x - sizer-4, i.shield.getPosition().y - sizer-2); //NW
glTexCoord2f(1, 0);
glVertex2f( i.shield.getPosition().x + sizer-4, i.shield.getPosition().y - sizer-2); //NE
glTexCoord2f(1, 1);
glVertex2f( i.shield.getPosition().x + sizer-4, i.shield.getPosition().y + sizer-2); //SE
glTexCoord2f(0, 1);
glVertex2f( i.shield.getPosition().x - sizer-4, i.shield.getPosition().y + sizer-2); //SW
glEnd();
glPopMatrix();
Ihre Lösung befindet sich irgendwo zwischen glBegin () und glEnd () und umfasst die Bearbeitung von glTexCoord2f () und glVertex2f (). Ich habe ein bisschen damit herumgespielt und bizarre Schrägstellungen erzielt, und ich bin sicher, dass Sie damit das erreichen können, was Sie versuchen zu tun.
Tatsache ist, ich habe keine Ahnung, wie es tatsächlich geht. Wahrscheinlich müssen Sie sich eingehend mit opengl befassen und sich auf einige der von mir erwähnten Funktionen konzentrieren.
BEARBEITEN >>>
Hinweis: Ja, dieser Code, den ich gepostet habe, ist offensichtlich ein Chaos, aber der Zweck ist es, ein grobes Beispiel zu liefern (aber es funktioniert). Für die Funktionalität, die Sie benötigen, benötigen Sie ein kompetentes Verständnis der opengl-Bibliothek.