Opengl直线生成算法(Bresenham、DDA、逐点、中点)

1.Bresenham.cpp

#include<gl/glut.h>
#include<math.h>


void Bres_Line(int x1, int y1, int x2, int y2)
{
	glColor3f(0.0f, 0.0f, 1.0f);//设置颜色,蓝色
	glPointSize(3);//栅格化点,直径为3

	int dx = abs(x2 - x1);//计算|∆x|
	int dy = abs(y2 - y1);//计算|∆y|
	if (dx == 0 && dy == 0)   return;
	int flag = 0;
	int temp;
	if (dx < dy)       //将斜率变换至0≤|k|≤1区间
	{
		flag = 1;
		temp = x1, x1 = y1, y1 = temp;//交换x1,y1
		temp = x2, x2 = y2, y2 = temp;//交换x2,y2
		temp = dx, dx = dy, dy = temp;//交换dx,dy
		int tx = (x2 - x1) > 0 ? 1 : -1; //若斜率是0≤k≤1,加1,若斜率是-1≤k≤0,减1
		int ty = (y2 - y1) > 0 ? 1 : -1;
		int curx = x1; //当前像素x坐标   
		int cury = y1; //当前像素y坐标
		//画起点
		glBegin(GL_POINTS);
		glVertex2i(x1, x2);
		glEnd();
		int d = 2 * dy - dx; //d初值
		while (curx != x2)
		{	//迭代公式
			if (d < 0)
				d += 2 * dy;
			else
			{
				cury += ty;
				d += 2 * (dy - dx);
			}
			if (flag)//若发生过斜率变换
			{
				glBegin(GL_POINTS);
				glVertex2i(cury, curx);
				glEnd();
			}
			else
			{
				glBegin(GL_POINTS);
				glVertex2i(curx, cury);
				glEnd();
			}
			curx += tx;//下一个像素的x坐标
		}
	}
}

	void myDisplay()
	{
		glClearColor(1.0, 1.0, 1.0, 1.0);//清除颜色,白色
		glClear(GL_COLOR_BUFFER_BIT);//消除缓冲区,使用上述清除颜色消除


		//Bres_Line(0, 0, 200, 200);
		//Bres_Line(200, 200, 0, 0);
		Bres_Line(0, 200, 100, 100);

		glFlush();//强制刷新
	}

	void Reshape(int w, int h)
	{
		glViewport(0, 0, (GLsizei)w, (GLsizei)h); //定义视口大小
		glMatrixMode(GL_PROJECTION);
		glLoadIdentity();
		gluOrtho2D(0.0, (GLdouble)w, 0.0, (GLdouble)h);//使左下角坐标为(0,0),右上角坐标为(w,h)
	}

	void main(int argc, char* argv[])
	{
		glutInit(&argc, argv);//初始化GLUT
		glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);//显示模式
		glutInitWindowPosition(100, 100);//窗口位置,窗口左上角在屏幕的坐标
		glutInitWindowSize(400, 400);//窗口大小
		glutCreateWindow("Bresenham画线法");//创建窗口,参数是窗口的标题
		glutDis
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值