Обработанное изображение проецируется на ближнюю плоскость, а затем выводится в окно. OpenGI позволяет определить область вывода окна. Если эта область не соответствует по размерам ближней плоскости, то изображение проекции масштабируется. По умолчанию область вывода равна клиентской области окна.

Ортогональная и перспективная проекции

Рис. 2. Ортогональная и перспективная проекции Вращение, масштабирование, сдвиг являются базовыми преобразованиями координат. На конечный результат последовательных преобразований влияет порядок их применения. Предположим мы применили преобразования 1,М и N. в результате чего получили матрицу преобразования ИМ, которая изменяет координаты вершины v следующим образом: LMNv. В OpenGL это равносильно последовательному применению этих преобразований в обратном порядке, т. е. L(M(Nv)). Таким образом, следующий код вращает объект, расположенный в точке (50,0,0) вокруг собственной оси Y на угол а.

glLoadldenty(); glTranslatef(50,0,0); glRotatef(а,0,1,0); а+=2; А поменяв местами вызовы двух функций, получим движение объекта по окружности, лежащей в плоскости XZ и с радиусом 50.

glLoadldenty(); glRotatef(а,0,1,0); glTranslatef(50,0,0); в +=2; Цвет также можно рассматривать как вершину в трехмерном пространстве цветов. В последних версиях OpenGL и в таких расширениях как, SGI_color_matrix и ARBJmaging, реализован дополнительный стек матриц для преобразований цвета. Сделав его активным вызовом glMatrixMode(GL_COLOR), матрицу можно изменять обычными функциями OpenGL как glTranslate. Таким образом, можно применять эффекты как увеличение яркости не только к растровым изображениям, но и к геометрическим моделям.

А также в последних версиях OpenGL и в расширении ARB_transpose_matrix можно загружать и умножать транспонированные матрицы.

Список функций для работы с матрицами преобразований: gILoadldentity - загружает единичную матрицу; gILoadMatrix - загружает матрицу из памяти; gIMatrixMode - выбирает активный стек матриц; gIMultMatrix - умножает текущую матрицу на указанную; gIPushMatrix - сохраняет текущую матрицу в стеке; gIPopMatrix - восстанавливает текущую матрицу из стека; gIFrustum - объем видимости с перспективной проекцией; glOrtho - объем видимости с ортографической проекцией; gluOrtho2D - объем видимости с ортографической проекцией; gluPerspective - объем видимости с перспективной проекцией; glViewport - изменение области вывода в окно; gIRotate - вращение; gIScale - масштабирование; glTranslate - сдвиг.

/*

Демонстрация функций преобразования координат. */

float а=0; // текущий угол вращения int р=0; // способ вращения int usem=l; // использовать ли матрицу // матрица дополнительного преобразования float m[16];

void example_init()

{

gl.set(1);

glClearColor(1,1,1, 1) ;

// загружаем в матрицу преобразование скоса m[0]=l;m[5]=l;m[10]=l;m[15]=l; m[4]=0.5774; // ctg(60);

}

void example_deinit()

{

gl.deinit();

}

// обработка ввода void input()

{

switch(in.vkey)

{

case VK_F1: p=!p; break; case VK_F2: usem=!usem; break; default:;

}

in.vkey=-l;

}

void draw() // вывод сцены {

input();

glClear(GL_COLOR_BUFFER_BIT) ; glLoadldentity() ;


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