当前位置:文档之家› 使用OpenGL编程实现Bresenham直线扫描转换算法

使用OpenGL编程实现Bresenham直线扫描转换算法

实验要求:
学习Visual C++ 6.0 集成编程环境的使用,OpenGL编程环境的设置,OpenGL语法及基本函数的使用等基础知识,并编程实现Bresenham直线扫描转换算法,得出相应的输出图形。

源程序:
#include<GL/glut.h>
void k1() //0<k<1
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,0.0,1.0);
glBegin(GL_POINTS);
GLint x1=0,y1=0,x2=400,y2=200;
GLint x=x1,y=y1;
GLint dx=x2-x1,dy=y2-y1,dT=2*(dy-dx),dS=2*dy;
GLint d=2*dy-dx;
glV ertex2i(x,y);
while(x<x2)
{
x++;
if(d<0)
d=d+dS;
else
{
y++;
d=d+dT;
}
glV ertex2i(x,y);
}
glEnd();
glFlush();
}
void k2() //k>1
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0,1.0,0.0);
glBegin(GL_POINTS);
GLint x1=0,y1=0,x2=200,y2=400;
GLint x=x1,y=y1;
GLint dx=x2-x1,dy=y2-y1,dT=2*(dx-dy),dS=2*dx;
GLint d=2*dx-dy;
glV ertex2i(x,y);
while(y<y2)
{
y++;
if(d<0)
d=d+dS;
else
{
x++;
d=d+dT;
}
glV ertex2i(x,y);
}
glEnd();
glFlush();
}
void k3() //-1<k<0
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,0.0);
glBegin(GL_POINTS);
GLint x1=0,y1=400,x2=400,y2=200;
GLint x=x1,y=y1;
GLint dx=x2-x1,dy=y2-y1,dT=2*dy,dS=2*dy+2*dx;
GLint d=2*dy-dx;
glV ertex2i(x,y);
while(x<x2)
{
x++;
if(d<0)
{
y--;
d=d+dS;
}
else
d=d+dT;
glV ertex2i(x,y);
}
glEnd();
glFlush();
}
void k4() //k<-1
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0,0.0,1.0);
glBegin(GL_POINTS);
GLint x1=0,y1=400,x2=200,y2=0;
GLint x=x1,y=y1;
GLint dx=x2-x1,dy=y2-y1,dT=-2*dy-2*dx,dS=-2*dx;
GLint d=-dy-2*dx;
glV ertex2i(x,y);
while(y>y2)
{
y--;
if(d>0)
d=d+dS;
else
{
x++;
d=d+dT;
}
glV ertex2i(x,y);
}
glEnd();
glFlush();
}
void main(int argc,char ** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
glutInitWindowSize(400,400);
glutInitWindowPosition(200,100);
glutCreateWindow("0<k<1(k=1/2)");
glClearColor(1.0,1.0,0.0,0.0);
gluOrtho2D(0.0,400.0,0.0,400.0);
glutDisplayFunc(k1);
glutCreateWindow("1<k(k=2)");
glClearColor(1.0,0.0,1.0,0.0);
gluOrtho2D(0.0,400.0,0.0,400.0);
glutDisplayFunc(k2);
glutCreateWindow("-1<k<0(k= -1/2)");
glClearColor(0.0,1.0,1.0,0.0);
gluOrtho2D(0.0,400.0,0.0,400.0);
glutDisplayFunc(k3);
glutCreateWindow("K<-1(k=-2)");
glClearColor(0.0,1.0,0.0,0.0);
gluOrtho2D(0.0,400.0,0.0,400.0);
glutDisplayFunc(k4);
glutMainLoop();
}。

相关主题