我用opengl画了一个圆圈。但它在外边缘显示了一个洞的图案。 我希望在不减小半径和增加样本数量的情况下填充此孔。 这是我的代码:
void drawcirc(float xi,float yj,float r1,int num1)
{
glClear(GL_COLOR_BUFFER_BIT);
//glBegin(GL_LINES);
glVertex2f(0,0);
for (int i=0;i<=num1;i++)
{
float theta=2.0f*3.141592f*float(i)/float(num1);
float x1=r1*cosf(theta);
float y1=r1*sinf(theta);
glBegin(GL_LINES);
glVertex2f(0,0);
glVertex2f(xi+x1,yj+y1);
glEnd();
sleep(5000);
glFlush();
}
}
然后调用函数drawcirc(0, 0, 0.6, 1250);
该怎么办?这是我的o / p,在外边缘有洞。
答案 0 :(得分:1)
好吧,你真的没画圈子。 GL_LINES将从点到点直到原语结束
你从0,0到圆圈边缘的一个点+你给函数的偏移画一条线。
所以你基本上画了一个轮子的轮辐,边缘的孔是轮辐之间的间隙。
答案 1 :(得分:0)
AlecTeal已经回答了正在发生的事情。我给你解决了问题:
#include <math.h>
void drawFilledCircle(float xi,float yj,float r1,int num1)
{
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0,0);
for(int i = 0; i <= num1; i++)
{
float theta = 2.0f*M_PI * float(i)/float(num1);
float x1 = r1*cosf(theta);
float y1 = r1*sinf(theta);
glVertex2f(xi+x1,yj+y1);
}
glEnd();
}
void drawCircle(float xi,float yj,float r1,int num1)
{
glBegin(GL_LINE_LOOP);
for(int i = 0; i < num1; i++)
{
float theta = 2.0f*M_PI * float(i)/float(num1);
float x1 = r1*cosf(theta);
float y1 = r1*sinf(theta);
glVertex2f(xi+x1,yj+y1);
}
glEnd();
}
一些提示:
永远不要将glFlush,glClear,sleep或类似物放入用于绘制几何形状的函数中。您希望能够从更高级别的绘图代码调用此类函数,并且此类调用具有高度破坏性。
glBegin和glEnd已被弃用,现在已经不鼓励使用它们15年了。更好地使用顶点数组。
如果你必须使用glBegin / glEnd将它们放在循环之外,而不是放在它里面。