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; }
相关文章推荐
- opengl中如何使窗口大小改变时,图形的形状不发生变化?
- 58同城沈剑:好的架构源于不停地衍变,而非设计
- Shell - 文件运算符
- NSOperation 之 Block循环引用——以及nil Nil NULL [NULL null]的区别
- Linux 系统信息分析
- CentOS7 添加用户到 sudoers
- 在 Linux 下使用 RAID(九):如何使用 ‘Mdadm’ 工具管理软件 RAID
- 在 Linux 下使用 RAID(九):如何使用 ‘Mdadm’ 工具管理软件 RAID
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——总体思路和架构
- 教你快速高效接入SDK——总体思路和架构
- LinuxCNC+EtherCAT(2)~~~~~~
- 网站制作笔记一域名购买与主机备案
- 推荐外链网盘 OpenDrive
- /etc/group文件详解
- bzoj4100【Usaco2015 Open】Bessie Goes Moo
- doGet与doPost的区别