您的位置:首页 > 理论基础

计算机图形学-基于OpenGL的直线扫描程序

2017-05-28 09:38 489 查看

计算机图形学-基于OpenGL的直线扫描程序

在OpenGL应用框架下实现画线算法,可以用DDA、中点方法或Bresenham算法。集成开发环境采用vs2013。

实验代码-DDA画线算法

#include <GL/glut.h>
#include <math.h>
#include <cstdio>

void init()  //初始化函数
{
glClearColor(1.0, 1.0, 1.0, 0.0);  //设置背景颜色

}

void DDALine()  //DDA画线算法
{
int x0 = 0, y0 = 0, x1 = 5,y1 = 2;
int x;
float dx, dy, y, k;
dx = x1 - x0, dy = y1 - y0;
k = dy / dx, y = y0;

glClear(GL_COLOR_BUFFER_BIT);  //清除颜色
glColor3f(1.0, 0.0, 0.0);  //设置线条颜色
glPointSize(2);  //设置线条大小
glBegin(GL_POINTS);
for (x = x0; x <= x1; x++)
{
GLfloat xi, yi;
//由于坐标系原因,将图像缩小0.1倍
xi = x*0.1;
yi = (int)(y + 0.5)*0.1;
glVertex2f(xi, yi);  //开始画点
y = y + k;
}
glEnd();
glFlush();
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("DDA画线算法");
init();
glutDisplayFunc(&DDALine);
glutMainLoop();
return 0;
}


实验代码-Bresenham画线算法

#include <GL/glut.h>
#include <math.h>
#include <cstdio>

void init()  //初始化函数
{
glClearColor(1.0, 1.0, 1.0, 0.0);  //初始化背景颜色

}

void Bresenhamline()  //Bresenham画线算法
{
int x0=0, y0=0, x1=5, y1=2;
int x, y, dx, dy,e;
dx = x1 - x0, dy = y1 - y0, e = -dx;
x = x0, y = y0;

glClear(GL_COLOR_BUFFER_BIT);  //清除颜色
glColor3f(0.0, 0.0, 1.0);  //线条颜色
glPointSize(2);  //线条大小
glBegin(GL_POINTS);
for (int i = 0; i <= dx; i++)
{
//由于坐标系原因将图像缩小0.1倍
GLfloat xx = x*0.1;
GLfloat yy = y*0.1;

glVertex2f(xx, yy);  //开始画点
x ++, e = e + 2*dy;
if (e > 0)
{
y++, e = e - 2*dx;
}
}
glEnd();
glFlush();
}

int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(100, 100);
glutInitWindowSize(400, 400);
glutCreateWindow("Bresenham画线算法");
init();
glutDisplayFunc(&Bresenhamline);
glutMainLoop();
return 0;
}


效果预览

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