如何解决如何在opengl中实现圆填充算法?
| 它的格式应为“ 0”。解决方法
使用
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();
}
,有一个gluDisk
,但签名与您给的有点不同。它始终使磁盘居中于原始位置,并且如果您不在磁盘上,则希望您使用glTranslate
。它在其他方面也更具通用性-绘制的磁盘的中心可能有一个孔(您显然并不在意),并且可以绘制一个“ loops”参数一次有多个磁盘。这使得它可以适应您所要求的工作,只比您想要的多一点:
void circle(float xcenter,float ycenter,float radius) {
GLUquadric* quad = gluNewQuadric();
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glTranslatef(xcenter,ycenter);
gluDisk(quad,radius,256,1);
glPopMatrix();
gluDeleteQuadric(quad);
}
我想说的是正确的,因为它很容易质疑像@genpfault所说的那样做和自己画一个圆形三角形风扇是否更容易。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。