计算机图形学-基于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; }
效果预览
相关文章推荐
- [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(一)
- 计算机图形学-基于OpenGL的绘制直线及图形变换练习
- [计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(二)
- VS2012下基于Glut OpenGL绘制直线(添加设置直线宽度)示例程序:
- 计算机图形学——直线的三种扫描转换算法
- 【计算机图形学】OpenGL入门1——第一个OpenGL程序
- 计算机图形学(OpenGL版)-第一个OpenGL程序
- 计算机图形学 学习笔记(一):概述,直线扫描转换算法:DDA,中点画线算法,Bresenham算法
- 计算机图形学-基于OpenGL的绘制Bezier曲线
- 计算机图形学——直线扫描转换基本增量法
- [Review]基于OpenGL的计算机图形学之期末复习提纲
- 计算机图形学-基于OpenGL的绘制空间曲线
- 计算机图形学-基于OpenGL的直线段的裁剪算法
- VS2012下基于Glut OpenGL绘制直线示例程序:
- [OpenGL]计算机图形学:基于Articulated Models的机械手臂实例
- 计算机图形学—判断点在直线上的方法
- 基于OpenGL的LS分形演示程序
- 【图形学】直线扫描算法之---bresenham改进算法(任何斜率,任何方向)
- 计算机图形学——生成直线的DDA算法
- 安装好cuda相关工具后发现原来基于mfc平台的opengl程序出现闪烁,最终解决