opengl逐点比较法绘直线

本文介绍了一种使用逐点比较法在OpenGL环境下绘制直线的算法实现。该方法通过判断直线斜率及象限位置来逐步确定像素点坐标,并利用GL_POINTS进行绘制。文章详细展示了算法的具体步骤和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//逐点比较法绘制直线


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


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值