КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Преобразования модели, преобразования координат, локальные системы координатСтр 1 из 2Следующая ⇒ Г.М. НАБЕРЕЖНОВ, Н.Н. МАКСИМОВ Преобразования модели и координат Методическое пособие к лабораторным работам по курсу «Компьютерная геометрия и графика»
Казань 2007 Преобразования модели, преобразования координат, локальные системы координат
Между парами функций glBegin() и glEnd() программистом создается поток вершин некоторого примитива, которые последовательно поступают на конвейер обработки. Самая первая операция обработки, которой вершины при этом подвергаются, - это аффинные преобразования матрицей моделирования-вида (VM). Эта матрица накапливает в себе все преобразования модели и вида, которые должны выполняться над вершиной. Функция void glMatrixMode(GLenum mode) устанавливает в качестве текущей матрицу VM при параметре mode равном GL_MODELVIEW. Функция void glLoadIdentity(void) устанавливает текущую матрицу в 1. В базовой библиотеке GL имеются такие функции преобразования модели: 1) void glTranslate{fd}( TYPE x, TYPE y, TYPE z ) CT := CT* 2) void glRotate{fd}( TYPE a, TYPE x, TYPE y, TYPE z ) CT := CT*R, R – матрица вращения, создается функций glRotate*( ). 3) void glScale{fd}( TYPE x, TYPE y, TYPE z ) CT:=CT* Пример 1: glMatrixMode(GL_MODELVIEW); //Текущей устанавливается матрица VM, CT:=VM glLoadIdentity( ); // VM:=1 glScalef( 1.5, 1.2, 1.0); // VM:=VM*MS, MS – матрица масштабирования, созданная функцией glTranslatef(2.0, 2.0, 0.0); // VM:=VM*MT = MS* MT glRotatef( 30.0, 0.0, 0.0, 1.0); // VM:=VM*MR = MS* MT* MR . . . . . . . glBegin(GL_POINTS); glVertex*(A0); glEnd( ); В этом примере над точкой A0 будут выполнены такие преобразования A1 = VM*A0 = MS* MT* MR*A0. Это равносильно такой последовательности преобразований над точкой – вращение, затем перемещение и, наконец, масштабирование. Обратите внимание на обратный порядок вызова функций! Создать программу, рисующую Fig.1. Эта фигура получается если Fig.0 зеркально отобразить относительно оси x0 затем повернуть на угол 300 и наконец сместить на 4.5 и 8.0 ед. по осям x0 и y0.
Приведенная ниже программа решает эту задачу. Функция fig0( ) создает нашу фигуру в положении Fig.0. Выделенный жирным фрагмент программы устанавливает VM=T*R*S и затем эта матрица применяется ко всем точкам Fig.0. В результате фигура оказывается в положении Fig.1.
|