//逐点比较法绘制直线
//出现的问题:窗口中不能显示出指定左边的像素点
#include<GL/glut.h>
#include<stdio.h>
void P2P(int x1,int y1,int x2,int y2)
{
int x,y,xi,yi;
if(y1>y2) //将直线平移至原点
{
yi=y1-y2;xi=x1-x2;
}
else
{
yi=y2-y1;xi=x2-x1;
}
int FLAG=0,f=x=y=0;
if((y2-y1)/(x2-x1)>0)
FLAG=1; //判别平移后直线在第一还是第二象限
int t=yi+xi; //总步数
glPointSize(1);
glColor3f(1.0f,1.0f,0.0f);
glPointSize(1);
while(t) //开始绘图
{
if(FLAG)
{
if(f<=0)
{
y++;f+=xi;
}
else
{
x++;f-=yi;
}
}
else
{
if(f>=0)
{
y++;f+=xi;
}
else
{
x--;f+=yi;
}
}
glBegin(GL_POINTS);
if(FLAG)
glVertex2i(x,y);
else
glVertex2i(y,x);
glEnd();
t--;
}
}
void mydisplay(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glClear(GL_COLOR_BUFFER_BIT);
P2P(0,0,300,500);
glFlush(); //将图像缓冲区中内容立即执行
}
int main(int argc,char* argv[])
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(100,100);
glutInitWindowSize(400,400);
gluOrtho2D(0.0,1000.0,0.0,1000.0);
//指定二维平面的一个矩形区域,单位是像素;glutInitWindowSize(400,400);语句创立的窗口
//使用世界坐标系,坐标原点在窗口正中央,其坐标表示范围是x=[-1,1],y=[-1,1];没有这条语句
//那么glVertex2i(x,y);画点操作不能执行;
glutDisplayFunc(mydisplay);
glutMainLoop();
return 0;
}
opengl逐点比较法绘直线
最新推荐文章于 2023-03-31 13:09:20 发布