如何在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所说的那样画一个圆形三角形扇子是否更容易