实验目的:
1. 掌握OpenGL环境的配置方法。
2. 熟悉OpenGL应用程序基础架构。
3. 熟练掌握简单OpenGL应用程序的建立、调试与运行。
4. 培养良好的编程习惯和风格,并且学习撰写实验报告。
实验步骤与内容:
1. 实现直线的DDA算法、正负法、Bresenham算法。
实验核心代码如下:
//直线DDA法
void dda(float x1, float y1,float x2 ,float y2 ) {
float k, i;
float x, y, dx, dy;
k = fabsf(x2 - x1);//这里用fabsf,这里可以取浮点数的绝对值
if (fabsf(y2 - y1) > k)
k =fabsf(y2 - y1);
dx = float(x2 - x1) / k;
dy = float(y2 - y1) / k;
x = float(x1);
y = float(y1);
for (i = 0.0; i < k; i++) {
glVertex2f(x, y);
x = x + dx;//----q1
y = y + dy;//----q2
}
}
测试方法:
void Display1(void) {
glClear(GL_COLOR_BUFFER_BIT);//注意这几个glClear等函数放的位置
glPointSize(2.0);
glColor3f(1.0, 0.0, 0.0);/*用红色绘制对象*/
glBegin(GL_POINTS);
dda(-250, 300, 300, 200);
dda(-50, -100, 300, 250);
dda(-500,0,0,-400);
dda(-570, 0, 570, 0); //x轴
dda(0, -570, 0, 570); //y轴
glEnd();
glFlush();
}
实验结果:
1.2 正负法:
//直线正负法
void MidpointLine(float xs, float ys, float xe, float ye) {
float a, b, dt1, dt2, d, x, y;
float absY = ye - ys;
float absX = xe - xs;
//采用对称的方法来绘画其他象限的图案
if ((fabsf(absY) > fabsf(absX)) && absX>0 && absY>0) {//斜率大于1
float m = ys;
ys = xs;
xs = m;
float n = ye;
ye = xe;
xe = n;
}
else if (absY<0 && absX>0 && (fabsf(absY) <= fabs(absX))) {//斜率-1到0
ys = -ys;
ye = -ye;
}
else if (absY<0 && absX>0 && (fabsf(absY)>fabs(absX))) {//斜率小于-1
float m = ys;
ys = xs;
xs = -m;
float n = ye;
ye = xe;
xe = -n;
/*printf("xs=%f\n", xs);
printf("ys