OpenGL zeichnet nur 72 FLächen



  • Hallo Leute,

    hab ein sonderbares Problem bei dem ich nicht weiterkomme.
    Wenn ich einen Cylinder Zeichne dann zeichnet OpenGL
    nur maximal 72 Flächen. Das sonderbare ist, dass die Schleife zum Zeichnen
    jedoch die Anzahl an "Faces" durchläuft (z.B. 74).
    (Ein Face ist bei mir eine Fläche des jeweiligen Objekts (Z.B. Quad)
    mit den Koordinaten.

    d.h. die letzten 2 Flächen (bei 74 Teilern) werden einfach nicht eingeblendet.
    Face culling ect. hab ich schon versucht!
    Wär toll wenn mir jemand einen Tip hätte, hab an allen Stellschrauben schon gedreht 😕

    Anbei der stark vereinfachte Code um die Oberfläche eines Cylinders mit Höhe = 1
    zu Zeichnen.

    Viele Güßr und Vielen Dank im vorraus
    Christian

    #region TEST_DRAW
    
                float slices = 73;
    
                float angleOffset = 2 * (float)Math.PI / slices;
    
                // Create Slices
                for (double alpha = 0; alpha < (2 * Math.PI); alpha += angleOffset)
                {
                    float x1;
                    float z1;
                    float x2;
                    float z2;
    
                    if (alpha + angleOffset < 2 * Math.PI)
                    {
                        x1 = (float)Math.Cos(alpha);
                        z1 = -1 * (float)Math.Sin(alpha);
                        x2 = (float)Math.Cos(alpha + angleOffset);
                        z2 = -1 * (float)Math.Sin(alpha + angleOffset);
                    }
                    else
                    {
                        x1 = (float)Math.Cos(alpha);
                        z1 = -1 * (float)Math.Sin(alpha);
                        x2 = (float)Math.Cos(0);
                        z2 = -1 * (float)Math.Sin(0);
                    }
                    gl.Begin(OpenGL.QUADS);
                    gl.Vertex(x1, 0, z1);
                    gl.Vertex(x2, 0, z2);
                    gl.Vertex(x2, 1, z2);
                    gl.Vertex(x1, 1, z1);
                    gl.End();
                }
    
                #endregion TEST_DRAW
    


  • Hallo Nochmal,

    hab grad herausgefunden, wenn ich das gl.Begin() & gl.End() vor bzw. nach der
    Schleife setze, dann werden alle Gezeichnet?!

    Wobei warum und wiso ist mir mega fraglich?!
    72 ist ja eig keine 2er Potenz... ergo kann ich
    wenig rückschlüsse ziehen?!

    Grüße
    Christian



  • Ich kann dir zwar nicht sagen warum es bei 72 aufhört aber es wäre sowieso sinnvoller es anders zu lösen.
    glBegin (und die folgenden Befehle) haben ohnehin eine nicht sehr gute Performance, da es bei jedem Frame von vom CPU zum GPU geschickt wird. Daher möglichst wenig Aufrufe damit durchführen.

    Ansonsten in Zukunft am besten per VertexArray darstellen (oder Vertex Elements).


Log in to reply