Draw a curved line from an arc edge

后端 未结 2 1423
面向向阳花
面向向阳花 2021-01-23 15:54

Here\'s the screenshot of what I am doing. Currently, I\'m stuck from drawing a curved borders into this rectangle.

<script

2条回答
  •  别那么骄傲
    2021-01-23 16:42

    GL_POLYGON is only for convex polygons.

    Link together the vertices on your inner and outer radii to form quads/triangles:


    #include 
    #include 
    
    void Torus2d
        ( 
        float angle,            // starting angle in radians
        float length,           // length of arc in radians, >0
        float radius,           // inner radius, >0
        float width,            // width of torus, >0
        unsigned int samples    // number of circle samples, >=3
        )
    {
        if( samples < 3 ) samples = 3;
        const float outer = radius + width;
        glBegin( GL_QUAD_STRIP );
        for( unsigned int i = 0; i <= samples; ++i )
        {
            float a = angle + ( i / (float)samples ) * length;
            glVertex2f( radius * cos( a ), radius * sin( a ) );
            glVertex2f( outer * cos( a ), outer * sin( a ) );
        }
        glEnd();
    }
    
    void display()
    {
        glClear( GL_COLOR_BUFFER_BIT );
    
        glMatrixMode( GL_PROJECTION );
        glLoadIdentity();
        double w = glutGet( GLUT_WINDOW_WIDTH );
        double h = glutGet( GLUT_WINDOW_HEIGHT );
        double ar = w / h;
        glOrtho( -4 * ar, 4 * ar, -4, 4, -1, 1);
    
        glMatrixMode( GL_MODELVIEW );
        glLoadIdentity();
    
        glColor3ub( 255, 0, 0 );
        Torus2d( 0, 1.57079633, 2, 1, 20 );
    
        glutSwapBuffers();
    }
    
    int main( int argc, char **argv )
    {
        glutInit( &argc, argv );
        glutInitDisplayMode( GLUT_RGBA | GLUT_DOUBLE );
        glutInitWindowSize( 640, 480 );
        glutCreateWindow( "GLUT" );
        glutDisplayFunc( display );
        glutMainLoop();
        return 0;
    }
    

提交回复
热议问题