Листинг 24.9

#include <windows.h> #include <stdlib.h> finclude <stdio.h> #include <math.h> #include <gl/gl.h> #include <gl/glu.h> #include <gl/glaux.h>

продолжение &

Геометрические преобразования

Листинг 24.9 (продолжение)

#include"main.h"
#include"GLDat.h"

//Параметры проекционной системы

float Znear - 1000.0;
float Zfar - 810000.0;
float W - 800.0:
float H - 600.0;
double Angle - 0.0:

float ZRotate - 110000.Of; //Центр вращения в объектных координатах сцены extern GLfloat 0bjPos[3] - {0.5f.0.5f.0.Of}: //Точка привязки сцены //в системе мира double Pi - 3.141592; GLfloat Rotate0bjY[4][4]; GLfloat Transiate0bjY[4][4];

//Матрица проецирования - результат последовательного выполнения: //отражения, сдвига влево на Znear. проецирования, масштабирования GLfloat Projection[4][4] -{

{2.0*Znear/W, O.Of. O.Of. 0.0f}.
{O.Of. 2.0*Znear/H, O.Of. O.Of}.
{O.Of. O.Of. (Zfar+Znear)/(Zfar-Znear), l.Of}.
{O.Of. O.Of. -2*Znear*Zfar/(Zfar-Znear). O.Of}.
}:

//Формирование видовой матрицы

void SetView(void)
{
glMatrixMode( GL_MODELVIEW ); glLoadIdentity();
glGetFloatv(GL_MODELVIEW_MATRIX. &TranslateObjY[0][0]);
glGetFloatv(GL_MODELVIEW_MATRIX. &RotateObjY[0][0]):

//Третье действие - Перенос сцены в точку привязки ObjPos

TranslateObjY[3][0] - ObjPos[0];
Translate0bjY[3][l] - ObjPos[l];
TransiateObjY[3][2] - ObjPos[2]+ZRotate:
glMultMatrixf(&TranslateObjY[0][0]):

//Второе действие - повернули сцену

RotateObjY[0][0] - Rotate0bjY[2][2] » cos(Angle/180.0*Pi); Rotate0bjY[2][0] - Rotate0bjY[0][2] - sin(Angle/180.0*Pi); Rotate0bjY[2][0] - -Rotate0bjY[2][0]; glMultMatrixf(&RotateObjY[0][0]):

//Первое действие - перенесли начало координат в центр вращения

//Вершины были в объектных координатах сцены

Transiate0bjY[3][2] - -ZRotate;
glMultMatrixf(&TranslateObjY[0][0]);
}

//Перемещение точки привязки сцены, float StepMen - 5000.Of; void ModelSimpl(int Key) {

switch (Key) {
case VKJPACE: ObjPos[0] - 0.5f:0bjPos[l]-0.5f: 0bjPos[2]-100000; break; case VKJJP: 0bjPos[2]+ - StepMen; break; case VK_D0WN: 0bjPos[2]- - StepMen; break; case VK_LEFT: ObjPos[0]- - StepMen; break;

⇐ Предыдущая| |Следующая ⇒