Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在opengl中实现圆填充算法?_Opengl - Fatal编程技术网

如何在opengl中实现圆填充算法?

如何在opengl中实现圆填充算法?,opengl,Opengl,它的形式应为圆(浮动X中心、浮动Y中心、浮动半径)使用GL\u三角形\u扇沿中心点向下移动,然后沿周长顶点移动: void glCircle( float x, float y, float r, bool filled = true, unsigned int subdivs = 20 ) { if( filled ) { glBegin( GL_TRIANGLE_FAN ); glVertex2f( x, y ); } else {

它的形式应为
圆(浮动X中心、浮动Y中心、浮动半径)

使用
GL\u三角形\u扇
沿中心点向下移动,然后沿周长顶点移动:

void glCircle( float x, float y, float r, bool filled = true, unsigned int subdivs = 20 ) {
    if( filled ) {
        glBegin( GL_TRIANGLE_FAN );
        glVertex2f( x, y );
    } else {
        glBegin( GL_LINE_STRIP );
    }

    for( unsigned int i = 0; i <= subdivs; ++i ) {
        float angle = i * ((2.0f * 3.14159f) / subdivs);
        glVertex2f( x + r * cos(angle), y + r * sin(angle) );
    }

    glEnd();
}
void glCircle(浮点x,浮点y,浮点r,布尔填充=true,无符号整数细分=20){
如有(已填写){
glBegin(GLU三角形风扇);
glVertex2f(x,y);
}否则{
glBegin(GL_线_带);
}

对于(unsigned int i=0;i有一个
gluDisk
,但它的签名与您给出的有所不同。它总是将磁盘居中于原点,并希望您在不需要磁盘的地方使用
glTranslate
。它在其他方面也有点多功能——它绘制的磁盘可以在中心有一个孔,wh您(显然)不关心的是,还有一个“循环”参数,用于一次绘制多个磁盘。这使得调整它以适应您所要求的仅比您希望的多一点工作:

void circle(float xcenter, float ycenter, float radius) {
    GLUquadric* quad = gluNewQuadric();

    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
    glTranslatef(xcenter, ycenter);

    gluDisk(quad, 0, radius, 256, 1);
    glPopMatrix();
    gluDeleteQuadric(quad);
}
我想说的是,这是正确的,现在还存在一个问题,就是像@genpfault所说的那样画一个圆形三角形扇子是否更容易