gpt4 book ai didi

c++ - 在 OpenGL 中用一些颜色填充 Bresenham 圆

转载 作者:行者123 更新时间:2023-11-28 00:31:43 25 4
gpt4 key购买 nike

我正在使用这个 Bresenham 算法来画圆。此代码有效,但我需要实心圆,而不仅仅是边框。

这是我的代码:

void setPixel(int x,int y)  {  
glBegin(GL_POINTS);
glColor3f(0.0f, 1.0f, 0.0f);
glPointSize (20.0);
glVertex2i(x,y);
glEnd();
}

void BresenhamKrug(int xCenter, int yCenter,int r){ //napravite parametarski poziv
int x=0,y=r;
int d=3-(2*r);

glColor3f(0.5,0.3,1.);


while(x<=y)
{
setPixel(xCenter+x,yCenter+y); setPixel(xCenter+y,yCenter+x);
setPixel(xCenter-x,yCenter+y); setPixel(xCenter+y,yCenter-x);
setPixel(xCenter-x,yCenter-y); setPixel(xCenter-y,yCenter-x);
setPixel(xCenter+x,yCenter-y); setPixel(xCenter-y,yCenter+x);

if (d<0)
d += (4*x)+6;
else{
d += (4*(x-y))+10;
y--;
}

x++;
}
glFlush();
}

有什么办法吗?

最佳答案

您可以将点保存在数组中并绘制多边形,或者 triangle fans .

glBegin(GL_POLYGON);

或:

void BresenhamKrug(int xCenter, int yCenter,int r){ //napravite parametarski poziv
int x=0,y=r;
int d=3-(2*r);

glColor3f(0.5,0.3,1.);

glBegin(GL_POLYGON);

while(x<=y)
{
glVertex2i(xCenter+x,yCenter+y); glVertex2i(xCenter+y,yCenter+x);
glVertex2i(xCenter-x,yCenter+y); glVertex2i(xCenter+y,yCenter-x);
glVertex2i(xCenter-x,yCenter-y); glVertex2i(xCenter-y,yCenter-x);
glVertex2i(xCenter+x,yCenter-y); glVertex2i(xCenter-y,yCenter+x);

if (d<0)
d += (4*x)+6;
else{
d += (4*(x-y))+10;
y--;
}

x++;
}
glEnd();
glFlush();
}

但不确定一个简单的圆方程是否足够.. drawing circle , 光栅化为 handled通过 openGL。

关于c++ - 在 OpenGL 中用一些颜色填充 Bresenham 圆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22643782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com