您的位置:首页 > 运维架构

opengl逐点比较法绘直线

2015-10-24 10:36 344 查看
//逐点比较法绘制直线

//出现的问题:窗口中不能显示出指定左边的像素点
#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: