它的格式应为circle(float xcenter, float ycenter, float radius)
。
答案 0 :(得分:7)
使用GL_TRIANGLE_FAN
向下移动中心点,然后向下移动周边顶点:
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();
}
答案 1 :(得分:2)
有一个gluDisk
,但它的签名与你给出的略有不同。它始终将磁盘置于原点的中心,如果不是您想要的磁盘,则希望使用glTranslate
。它在其他方面也有点多功能 - 它绘制的磁盘可能在中心有一个洞,你(显然)不关心,以及一个“循环”参数来绘制一个以上的磁盘时间。这使得它适应你所要求的工作量而不是你想要的工作:
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那样说,并且自己画一个圆形的三角形扇形。