构造完整的DDA画线算法程序,并对各种情况进行测试。(20分)
#include <stdarg.h>
#include <windows.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <glut/glut.h>
#include<stdlib.h>
void LineDDA(int x0, int y0, int xEnd, int yEnd)
{
int dx = xEnd - x0;
int dy = yEnd - y0;
int steps;
float xIncrement, yIncrement, x = x0, y = y0;
if (abs(dx) > abs(dy))
{
steps = abs(dx);
}
else
{
steps = abs(dy);
}
xIncrement = float(dx) / float(steps);
yIncrement = float(dy) / float(steps);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
glVertex3f(x0, y0, 0);
for (int k = 0; k <= steps; ++k)
{
x += xIncrement;
y += yIncrement;
glVertex3f(x, y, 0);
}
glVertex3f(xEnd, yEnd, 0);
glEnd();
glFlush();
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(25, 25 ,112, 0);
glViewport(0, 0, 500, 500);
LineDDA(30, 30, 200, 180);
}
void myInit(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glColor3f(1.0, 0.0, 0.0);
gluOrtho2D(0.0, 500.0, 0.0, 500.0);
glMatrixMode(GL_MODELVIEW);
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(300, 400);
glutInitWindowPosition(200, 200);
glutCreateWindow("Point");
glutDisplayFunc(display);
myInit();
glutMainLoop();
return(0);
}
编制完整的中点画线算法程序,并对各种情况进行测试。(20分)
#include <glut/glut.h>
void init()
{
glEnable(GL_POINT_SMOOTH);
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POLYGON_SMOOTH);
}
void Mid_Line1(int x1, int y1, int x2, int y2)
{
int a, b, c, x, y, p, _2a, _2a_2b;
if (x2 < x1)
{
int temp;
temp = x1, x1 = x2, x2 = temp;
temp = y1, y1 = y2, y2 = temp;
}
a = y1 - y2, b = x2 - x1;
_2a = 2 * a, _2a_2b = _2a + 2 * b;
y = y1, p = 2 * a + b;
for (x = x1; x <= x2; ++x)
{
glVertex2i(x, y);
if (p > 0)
p = p + _2a;
else
++y, p += _2a_2b;
}
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glLoadIdentity();
gluOrtho2D(19, 31, 9, 21);
}
void display()
{
glClearColor(1, 1, 1, 0);
glClear(GL_COLOR_BUFFER_BIT);
glLineWidth(3);
glColor3f(0.3, 0., 1);
glBegin(GL_LINES);
glVertex2i(20, 5), glVertex2i(30, 18);
glEnd();
glPointSize(8);
glColor3f(1.0, 0.0, 1.0);
glBegin(GL_POINTS);
Mid_Line1(20, 5, 30, 18);
glEnd();
glFlush();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(400, 400);
glutCreateWindow("中点画线算法演示!");
glutReshapeFunc(reshape);
display();
glutDisplayFunc(display);
glutMainLoop();
}
分别绘制2个正方形区域,左边正方形使用实模式绘制,右边正方形选用一个自己喜欢的图案填充。(20分)
#include <glut/glut.h>
void Viewport(int x, int y, int w, int h)
{
glViewport(x, y, w, h);
glLoadIdentity();
}
void Paint()
{
int w = glutGet(GLUT_WINDOW_WIDTH) / 2;
int h = glutGet(GLUT_WINDOW_HEIGHT);
GLubyte fly[]{
0X00,0X01,0X80,0X00,0X00,0X02,0X40,0X00,
0X00,0X04,0X20,0X00,0X00,0X08,0X20,0X00,
0X00,0X10,0X10,0X00,0X00,0X20,0X08,0X00,
0X00,0X40,0X04,0X00,0X00,0X80,0X02,0X00,
0X01,0X00,0X01,0X00,0X02,0X00,0X00,0X80,
0X04,0X00,0X00,0X40,0X08,0X00,0X00,0X20,
0X08,0X00,0X00,0X20,0X20,0X00,0X00,0X08,
0X20,0X00,0X00,0X04,0X40,0X00,0X00,0X02,
0X80,0X00,0X00,0X01,0X40,0X00,0X00,0X02,
0X20,0X00,0X00,0X04,0X10,0X00,0X00,0X08,
0X08,0X00,0X00,0X10,0X04,0X00,0X00,0X20,
0X02,0X00,0X00,0X40,0X01,0X00,0X00,0X80,
0X00,0X80,0X01,0X00,0X00,0X40,0X02,0X00,
0X00,