Ausgefülltes Polygon mit Löchern zeichnen



  • @knivil: Hm, ja... das geht dann nicht. Man muss den Stencil-Puffer bei jeden Frame also neu berechnen. Anders gehts wohl leider nicht.



  • Was spricht dagegen, es gneau so zu machen, wie es das spiel tut: zuerst ein großes Rechteck zeichnen auf das eine Textur gekachelt wird. dann einfach die Löcher drüber zeichnen.



  • Warum sollte man 100% rendern wenn sowieso nur 1% sichtbar ist? 😕



  • weil es nichts kostet.



  • Also ich würde so eine Map nicht als ein großes Polygon mit Löchern betrachten, sondern eher als einen Haufen Polygone. Schau dir mal SFML an...



  • Jo...

    Himmel zeichnen, Ziegel drüber zeichnen, Gras drüber zeichnen, gewonnen.

    Wenn du weniger Overdraw willst, kannst du ja die Himmel-Polygone (manuell, im Level Editor) so zurechtschneiden dass nur der sichtbare Teil gezeichnet wird. Da du aber immer noch von hinten nach vorne zeichnest, muss das nicht genau sein -- ungefähr Pi * Daumen ausgeschnitten reicht vollkommen - darf nur nicht zu wenig sein.

    Kann man natürlich auch automatisieren. Je schlauer man das ganze macht, desto weniger CPU und GPU wird es weglutschen, aber dafür muss man dann auch entsprechend viel programmieren.



  • dot schrieb:

    Also ich würde so eine Map nicht als ein großes Polygon mit Löchern betrachten, sondern eher als einen Haufen Polygone. Schau dir mal SFML an...

    Waaaaaaaaaaah, er hat SFML gesagt!!!
    Wo ist die SDL <-> SFML Polizei wenn man sie braucht??? 🤡



  • He Leute, ich habe ein Big-Problem 😃

    Problem 1: Es ist Samstag Abend und ich sitze hier und programmiere.

    Problem 2: OpenGL zeichnet meine Polygone nicht so wie ich will.

    Schaut mal auf das Bild. Links habe ich mit System.Drawing(GDI+) ausgegeben, rechts mit OpenGL. Ich habe eine Krake mit Polygonen gezeichnet. Links ist es so wie es sein sein soll, rechts mit OpenGL, was Probleme macht.

    http://img840.imageshack.us/img840/9770/polygonfehler.png

    Hier der OpenGL-Code:

    public override void drawFillPolygon(string texture, List<Vertex> points, bool makeFirstPixelTransparent)
            {
                Gl.glEnable(Gl.GL_TEXTURE_2D);
                Gl.glColor3f(1,1,1);
                Gl.glBindTexture(Gl.GL_TEXTURE_2D, getTexture(texture, makeFirstPixelTransparent, null).texturID);
                Gl.glBegin(Gl.GL_POLYGON);
                foreach (Vertex V in points)
                {
                    Gl.glTexCoord2f(V.s, V.t);
                    Gl.glVertex2i(V.x, V.y);
                }
                Gl.glTexCoord2f(points[0].s, points[0].t);
                Gl.glVertex2i(points[0].x, points[0].y);
                Gl.glEnd();
            }
    

    Hier der GDI+-Code

    public override void drawFillPolygon(string texture, List<Vertex> points, bool makeFirstPixelTransparent)
            {
                Point[] newPoints = new Point[points.Count];
                for (int i=0;i<newPoints.Length;i++) newPoints[i] = new Point(points[i].x, points[i].y);
                if (graph != null) graph.FillPolygon(getTexture(texture, makeFirstPixelTransparent, null).textureBrush, newPoints);
            }
    ...
    
    public class Vertex
        {
            public float s;
            public float t;
            public int x;
            public int y;
    
            public Vertex();
        }
    

    Warum will die Krake nicht so wie ich will? 😡



  • OpenGL kann nur konvex, nicht aber konkav? Brauche ich etwa das hier? http://wiki.delphigl.com/index.php/Ear_Clipping_Triangulierung

    Ihr müsst mir helfen 😃



  • Ah ja... ich habe jetzt mal alle konkaven Polygone in Dreiecke zerlegt.

    So sieht es nun aus:

    http://img163.imageshack.us/img163/9770/polygonfehler.png

    Es geht vorran mit mein bescheuerten Spiel 😃


Anmelden zum Antworten