glVertex2f (verts [k].x, verts [k].y); glEnd ( );

void displayFcn (void)

{

/* Определяются исходные положения вершин треугольника. */ GLint nVerts = 3;

wcPt2D verts [3] = 50.0, 25.0, 150.0, 25.0, 100.0, 100.0 ;

/* Вычисляется положение центра масс треугольника. */ wcPt2D centroidPt;

GLint k, xSum = 0, ySum = 0; for (k = 0; k < nVerts; k++) { xSum += verts [k].x; ySum += verts [k].y;

}

centroidPt.x = GLfloat (xSum) / GLfloat (nVerts);

centroidPt.y = GLfloat (ySum) / GLfloat (nVerts);

/* Задаются параметры геометрического преобразования. */ wcPt2D pivPt, fixedPt; pivPt = centroidPt; fixedPt = centroidPt;

GLfloat tx = 0.0, ty = 100.0;

GLfloat sx = 0.5, sy = 0.5;

GLdouble theta = pi/2.0;

glClear (GL_COLOR_BUFFER_BIT); // Очищается окно на экране.

glColor3f (0.0, 0.0, 1.0);

/* Исходный цвет заполнения выбирается синим. */ triangle (verts); // Отображается синий треугольник.

/* Сложная матрица инициализируется как единичная. */ matrix3x3SetIdentity (matComposite);

/* Строится сложная матрица для последовательности преобразований. */ scale2D (sx, sy, fixedPt);

/* Первое преобразование: масштабирование. */ rotate2D (pivPt, theta);

/* Второе преобразование: поворот. */ translate2D (tx, ty);

/* Последнее преобразование: трансляция. */

/* Сложная матрица действует на вершины треугольника. */ transformVerts2D (nVerts, verts);

glColor3f (1.0, 0.0, 0.0);

/* Задается цвет преобразованного треугольника. */ triangle (verts);

/* Отображается красный преобразованный треугольник. */ glFlush ( );

)

void winReshapeFcn (GLint newWidth, GLint newHeight) { glMatrixMode (GL_PROJECTION); glLoadldentity ( );

glu0rtho2D (xwcMin, xwcMax, ywcMin, ywcMax); glClear (GL_COLOR_BUFFER_BIT);

}

void main (int arge, char ** argv)

{

glutlnit (&argc, argv);

glutlnitDisplayMode (GLUT_SINGLE | GLUT_RGB); glutlnitWindowPosition (50, 50); glutlnitWindowSize (winWidth, winHeight); glutCreateWindow ("Последовательность геометрических преобразований");

init ( ) ;

glutDisplayFunc (displayFcn); glutReshapeFunc (winReshapeFcn);

glutMainLoop ( ) ;

}

ДРУГИЕ ДВУХМЕРНЫЕ ПРЕОБРАЗОВАНИЯ

Такие базовые преобразования, как трансляция, поворот и масштабирование, являются стандартными компонентами графических библиотек. Некоторые пакеты предлагают несколько дополнительных преобразований, полезных в определенных приложениях. Двумя такими преобразованиями являются отражение и сдвиг.

ОТРАЖЕНИЕ

Преобразование, дающее зеркальное изображение объекта, называется отражением. При двухмерном отражении это изображение генерируется относительно оси отражения как поворот объекта на 180° относительно оси отражения. Ось отражения можно выбрать на плоскости ху или перпендикулярно плоскости ху. Когда ось отражения является линией на плоскости ху, траектория поворота вокруг этой оси находится в плоскости, перпендикулярной плоскости ху. Когда ось отражения перпендикулярна плоскости ху, траектория поворота лежит в плоскости ху. Ниже приводятся примеры некоторых распространенных отражений.


⇐ вернуться назад | | далее ⇒