opengl程序,需要导入glut和glew库才能正常运行
#include <GL/glew.h>
#include <GL/glut.h>
#include <math.h>
#include <stdlib.h>
#pragma comment (lib, "glew32.lib")
/*程序运行之前请导入glut库和glew库*/
void init(void){
glClearColor(1.0,1.0,1.0,0.0); //设置窗口背景色为白色
glMatrixMode(GL_PROJECTION); //设置投影类型(模式)
gluOrtho2D(0.0,200.0,0.0,150.0);//指定屏幕区域坐标范围,横向是0到200米,纵向是0到150米,
}
void lineSegment(void){
glClear (GL_COLOR_BUFFER_BIT); //清除屏幕
glColor3f(1.0,0.0,0.0); //设置线条颜色为红色
glBegin (GL_LINES); //建立线段坐标(5,5)-(195,145)
glVertex2i(5,5);
glVertex2i(195,145);
glEnd();
glFlush(); //强制刷新缓冲
}
//取整函数
int round(float a){
return (int)(a+0.5);
}
//DDA画线
void lineDDA(void){
int x0=100;int y0=5;int xEnd=195;int yEnd=145;
int dx = xEnd - x0, dy = yEnd - y0, steps, k;
float xIncrement, yIncrement, x = x0, y = y0;
if (fabs (dx) > fabs (dy))
steps = fabs (dx);
else
steps = fabs (dy);
xIncrement = (float )(dx) / (float )(steps);
yIncrement = (float )(dy) / (float )(steps);
glClear (GL_COLOR_BUFFER_BIT); //清除屏幕
glColor3f(0.0,0.0,1.0); //设置线条颜色为蓝色
glBegin (GL_POINTS); //画点
glVertex2i(round(x),round(y));
for (k = 0; k < steps; k++) {
x += xIncrement;
y += yIncrement;
glVertex2i(round(x),round(y));
}
glEnd();
glFlush(); //强制刷新缓冲
}
//Bresenham画线,要求斜率绝对值小于1
/* Bresenham line-drawing procedure for |m| < 1.0. */
void lineBresenhanms (void)
{
int x0=2;int y0=20;int xEnd=100;int yEnd=90;
int dx = fabs (xEnd - x0), dy = fabs(yEnd - y0);
int p = 2 * dy - dx;
int twoDy = 2 * dy, twoDyMinusDx = 2 * (dy - dx);
int x, y;
/* Determine which endpoint to use as start position. */
if (x0 > xEnd) {
x = xEnd;
y = yEnd;
xEnd = x0;
}
else {
x = x0;
y = y0;
}
glClear (GL_COLOR_BUFFER_BIT); //清除屏幕
glColor3f(0.0,1.0,0.0); //设置线条颜色为绿色
glBegin (GL_POINTS); //画点
glVertex2i(x,y);
while (x < xEnd) {
x++;
if (p < 0)
p += twoDy;
else {
y++;
p += twoDyMinusDx;
}
glVertex2i(x,y);
}
glEnd();
glFlush(); //强制刷新缓冲
}
int main(int argc, char** argv)
{
glutInit(&argc,argv); //初始化GLUT
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);//设置显示模式
glutInitWindowPosition (100,100); //设置窗口左上角坐标
glutInitWindowSize(400,300); //设置窗口的宽高
glutCreateWindow ("GLUT画线"); //创建窗口
init(); //初始化
//glutDisplayFunc(lineBresenhanms);//Bresenhanms画线
//glutDisplayFunc(lineSegment);//用GLUT函数画线
glutDisplayFunc(lineDDA);//DDA画线
glutMainLoop(); //绘图主循环
}