#include <GL/glut.h>
#include <stdlib.h>
bool hei=true;
/*void gl_Point(int x,int y)
{
glColor3f (1.0, 1.0, 1.0);
// glBegin(GL_POINTS);
//glVertex2d(0.75, 0.25);
if(hei)
{
// glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
hei=false;
}
else
{
//glColor3f (0.0, 0.0, 0.0);
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
hei=true;
}
}*/
void gl_Point(int x,int y)
{
//glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
//glFlush ();
}
void daa(int x1,int y1,int x2,int y2)
{
int k,i;
float x,y,dx,dy;
k=abs(x2-x1);
if(abs(y2-y1)>k)
k=abs(y2-y1);
dx=float(x2-x1)/k;
dy=float(y2-y1)/k;
x=float(x1);
y=float(y1);
for(i=0;i<k;i++)
{
gl_Point(int(x+0.5),int(y+0.5));
x=x+dx;
y=y+dy;
}
}
void circle(int radius)
{
int x,y,f;
x=0;y=0+radius;f=0;
while(y>0)
{
gl_Point(x,y);
gl_Point(-x,y);
gl_Point(x,-y);
gl_Point(-x,-y);
if(f>0)
{
f=f-2*y+1;y=y-1;
}
else
{
f=f+2*x+1;x=x+1;
}
}
if(y==0){
gl_Point(x,y);
gl_Point(-x,y);
gl_Point(x,-y);
gl_Point(-x,-y);
}
}
void display(void)
{
/* 清除所有的像素*/
glClear (GL_COLOR_BUFFER_BIT);
//gl_Point();
if(hei)
glColor3f (0.0, 0.0, 0.0);
else
glColor3f (1.0, 1.0, 1.0);
hei=!hei;
daa(50,100,100,100);
circle(20);
glEnd();
/* 不等待!立刻开始处理在缓冲区中的OpenGL函数调用*/
glFlush ();
}
void init (void)
{
/* 指定清除颜色*/
glClearColor (0.0, 0.0, 0.0, 0.0);
/* 初始化视景体*/
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-400.0, 400.0, -300.0, 300.0, -1.0, 1.0);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv); /*初始化GLUT并处理命令行参数*/
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (800, 600); /*指定窗口的大小,单位为像素*/
glutInitWindowPosition (50, 50); /*指定窗口左上角在屏幕上的位置*/
glutCreateWindow ("实验二"); /*使用一个OpenGL场景创建一个窗口*/
init ();
glutDisplayFunc(display);
glutIdleFunc(display);
glutMainLoop();
return 0; /* ANSI C 要求main()返回一个 int值 */
}