Md *_*min 2 c++ opengl freeglut
我已经实现了Bresenham的Circle算法。但是此代码仅输出白色窗口。不绘制圆形边界的单个像素。
该函数绘制8个对称点。
void plot_point(int x, int y, int xc, int yc)
{
glBegin(GL_POINTS);
glVertex2i(xc+x, yc+y);
glVertex2i(xc+x, yc-y);
glVertex2i(xc+y, yc+x);
glVertex2i(xc+y, yc-x);
glVertex2i(xc-x, yc-y);
glVertex2i(xc-y, yc-x);
glVertex2i(xc-x, yc+y);
glVertex2i(xc-y, yc+x);
glEnd();
}
Run Code Online (Sandbox Code Playgroud)
此函数计算x,y坐标。
void bresenham_circle(int r)
{
int x = 0, y = r, dx;
plot_point(x, y, 0, 0);
dx = 3 - 2*r;
x += 1;
if(dx >= 0)
y -= 1;
while(x < y)
{
plot_point(x, y, 0, 0);
if(dx < 0)
dx += 4*x + 6;
else
dx += 4*(x-y) + 10;
if(dx >= 0)
y -= 1;
x += 1;
}
glFlush();
}
Run Code Online (Sandbox Code Playgroud)
编辑: 这是main()和display()函数:
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0.5, 0.0);
int radius = 8;
bresenham_circle(radius);
}
int main(int argc, char **argv)
{
glutInit(&argc,argv);
glutInitWindowPosition(0, 0);
glutInitWindowSize(640,480);
glutCreateWindow("Bresenham's Circle");
glClearColor(1.0, 1.0, .5, 1.0);
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我试过画一些单点,即使在[[-1,-1),(1,1)]空间中也没有出现。
在我的一端工作正常:
在放下圆形几何图形之前,请确保设置合理的投影/模型视图矩阵+圆形半径(以及彩色/绘制颜色):
glClearColor( 0, 0, 0, 1 );
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -100, 100, -100, 100, -1, 1 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glColor3ub( 255, 255, 255 );
bresenham_circle( 50 );
Run Code Online (Sandbox Code Playgroud)
全部一起:
glClearColor( 0, 0, 0, 1 );
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glOrtho( -100, 100, -100, 100, -1, 1 );
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glColor3ub( 255, 255, 255 );
bresenham_circle( 50 );
Run Code Online (Sandbox Code Playgroud)