Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Преобразования модели, преобразования координат, локальные системы координат




Г.М. НАБЕРЕЖНОВ, Н.Н. МАКСИМОВ

Преобразования модели и координат

Методическое пособие

к лабораторным работам по курсу

«Компьютерная геометрия и графика»

 

 

Казань 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.


Поделиться:

Дата добавления: 2015-09-14; просмотров: 115; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты