Презентация на тему: 3. Преобразования координат

3. Преобразования координат
Вектор в однородной форме
Переход к новой системе координат
Координатный фрейм
Объектная система координат
Объектная система координат
Мировая система координат
Мировая система координат
Система координат камеры
Система координат камеры
Система координат камеры
Система координат камеры
Положение наблюдателя
Система координат пользователя
Определение системы координат наблюдателя
Пример
Пример управления камерой
Пример управления камерой
Пример управления камерой
Пример управления камерой
Пример управления камерой
Пример управления камерой
Пример управления камерой
Пример управления камерой
Пример управления камерой
1/25
Средняя оценка: 4.0/5 (всего оценок: 10)
Код скопирован в буфер обмена
Скачать (185 Кб)
1

Первый слайд презентации: 3. Преобразования координат

Изображение слайда
2

Слайд 2: Вектор в однородной форме

Изображение слайда
3

Слайд 3: Переход к новой системе координат

X 1 X 0 Y 1 U V S Y 0

Изображение слайда
4

Слайд 4: Координатный фрейм

S Y 1 X 1 Y 0 X 0 f 22 f 12 f 21 f 11 V U s 2 s 1

Изображение слайда
5

Слайд 5: Объектная система координат

При создании (моделировании) объекта используется т. н. объектная (или локальная ) система координат.

Изображение слайда
6

Слайд 6: Объектная система координат

Использование объектных координат сильно облегчает жизнь при создании моделей объектов. Разные модели никак не зависят друг от друга - можно использовать разные масштабы, разные точки отсчета и т. п.

Изображение слайда
7

Слайд 7: Мировая система координат

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

Изображение слайда
8

Слайд 8: Мировая система координат

x y z Мировая система координат Расположение и ориентация объектов сводится к переносу модели из объектной системы координат в мировую. М ировой называют систему координат, используемую как единую систему отсчета для всей сцены.

Изображение слайда
9

Слайд 9: Система координат камеры

После того, как объекты помещены на сцену (в мировую систему координат!), самое время подумать о том, где и как установить камеру.

Изображение слайда
10

Слайд 10: Система координат камеры

1 2 3 1 2 3 Помещая камеру в различные точки сцены мы имеем возможность акцентировать внимание зрителя на различных частях сцены

Изображение слайда
11

Слайд 11: Система координат камеры

Система координат, в которой точка отсчета привязана к камере, используется в процессе отображения объектов на экран. «Поместить камеру на сцену» означает ввести новую систему координат и поместить в нее объекты сцены. Один и тот же объект в разных «камерных» системах координат

Изображение слайда
12

Слайд 12: Система координат камеры

y x z z x y В библиотеках Direct3D и OpenGL оси системы координат камеры ориентированы следующим образом: Ox - слева на право, Oy - с низу вверх, Oz - вглубь экрана для D3D и наоборот для OpenGL. Плоскость Oxy совпадает с плоскостью экрана.

Изображение слайда
13

Слайд 13: Положение наблюдателя

void gluLookAt( GLdouble ex, GLdouble ey, GLdouble ez, GLdouble cx, GLdouble cy, GLdouble cz, GLdouble upx, GLdouble upy, GLdouble upz );

Изображение слайда
14

Слайд 14: Система координат пользователя

Y e Z e X e Пл. Y e Z e Y w Z w X w E U=UPxN C UP N=E – C V=NxU

Изображение слайда
15

Слайд 15: Определение системы координат наблюдателя

Изображение слайда
16

Слайд 16: Пример

Изображение слайда
17

Слайд 17: Пример управления камерой

#include <GL/glut.h> #define _USE_MATH_DEFINES #include <math.h> struct Point3 { double x; double y; double z; }; struct Vector3 { double x; double y; double z; }; Point3 eye, look; Vector3 up; Vector3 u, v, n;

Изображение слайда
18

Слайд 18: Пример управления камерой

//Загрузка матрицы моделирования-вида существующими для камеры величинами void setModelViewMatrix(void) { float m[16 ]; Vector3 eVec; eVec.x = eye.x; eVec.y = eye.y; eVec.z = eye.z; m[0] = u.x; m[4] = u.y; m[8] = u.z; m[12] = -eVec.x * u.x - eVec.y * u.y - eVec.z * u.z; m[1] = v.x; m[5] = v.y; m[9] = v.z; m[13] = -eVec.x * v.x - eVec.y * v.y - eVec.z * v.z; m[2] = n.x; m[6] = n.y; m[10] = n.z; m[14] = -eVec.x * n.x - eVec.y * n.y - eVec.z * n.z; m[3] = 0.0; m[7] = 0.0; m[11] = 0.0; m[15] = 1.0; glMatrixMode(GL_MODELVIEW); glLoadMatrixf(m); }

Изображение слайда
19

Слайд 19: Пример управления камерой

// Создание матрицы моделирования-вида void set(Point3 Eye, Point3 Look, Vector3 Up) { eye = Eye; look = Look; up = Up; n.x = eye.x - look.x; n.y = eye.y - look.y; n.z = eye.z - look.z; u.x = up.y * n.z - up.z * n.y; u.y = up.z * n.x - up.x * n.z; u.z = up.x * n.y - up.y * n.x; double norm; norm = sqrt(n.x * n.x + n.y * n.y + n.z * n.z); n.x = n.x / norm; n.y = n.y / norm; n.z = n.z / norm; norm = sqrt(u.x * u.x + u.y * u.y + u.z * u.z); u.x = u.x / norm; u.y = u.y / norm; u.z = u.z / norm; v.x = n.y * u.z - n.z * u.y; v.y = n.z * u.x - n.x * u.z; v.z = n.x * u.y - n.y * u.x; setModelViewMatrix(); }

Изображение слайда
20

Слайд 20: Пример управления камерой

//Скольжение void slide(float delU, float delV, float delN) { eye.x += delU * u.x + delV * v.x + delN * n.x; eye.y += delU * u.y + delV * v.y + delN * n.y; eye.z += delU * u.z + delV * v.z + delN * n.z; setModelViewMatrix(); } //Крен void roll(float angle) { float cs = cos(M_PI / 180 * angle); float sn = sin(M_PI / 180 * angle); Vector3 t = u; u.x = cs * t.x - sn * v.x; u.y = cs * t.y - sn * v.y; u.z = cs * t.z - sn * v.z; v.x = sn * t.x + cs * v.x; v.y = sn * t.y + cs * v.y; v.z = sn * t.z + cs * v.z; setModelViewMatrix(); }

Изображение слайда
21

Слайд 21: Пример управления камерой

//Тангаж void pitch(float angle) { float cs = cos(M_PI / 180 * angle); float sn = sin(M_PI / 180 * angle); Vector3 t = v; v.x = cs * t.x - sn * n.x; v.y = cs * t.y - sn * n.y; v.z = cs * t.z - sn * n.z; n.x = sn * t.x + cs * n.x; n.y = sn * t.y + cs * n.y; n.z = sn * t.z + cs * n.z; setModelViewMatrix(); } //Рыскание void yaw(float angle) { float cs = cos(M_PI / 180 * angle); float sn = sin(M_PI / 180 * angle); Vector3 t = u; u.x = cs * t.x + sn * n.x; u.y = cs * t.y + sn * n.y; u.z = cs * t.z + sn * n.z; n.x = -sn * t.x + cs * n.x; n.y = -sn * t.y + cs * n.y; n.z = -sn * t.z + cs * n.z; setModelViewMatrix(); }

Изображение слайда
22

Слайд 22: Пример управления камерой

//Поворот камеры вокруг оси v void rotate(float angle) { float cs = cos(M_PI / 180 * angle); float sn = sin(M_PI / 180 * angle); Point3 Eye, Look; Vector3 Up; Eye.x = cs * eye.x - sn * eye.z; Eye.y = eye.y; Eye.z = sn * eye.x + cs * eye.z; Look = look; Up = up; set(Eye, Look, Up); } void setShape(float left, float right, float bottom, float top, float near, float far) { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(left, right, bottom, top, near, far); }

Изображение слайда
23

Слайд 23: Пример управления камерой

void myKeyboard(unsigned char key, int x, int y) { switch(key) { case '1': slide(0, 0, 0.2); break; // скольжение вперед case '2': slide(0, 0, -0.2); break; // скольжение назад case '3': pitch(-1.0); break; // тангаж вверх case '4': pitch(1.0); break; // тангаж ввниз case '5': roll(-1.0); break; // крен влево case '6': roll(1.0); break; // крен вправо case '7': yaw(-1.0); break; // рыскание влево case '8': yaw(1.0); break; // рыскание вправо case '9': rotate(1.0); break; case '0': rotate(-1.0); break; } glutPostRedisplay(); } void myDisplay(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutWireTeapot(1.0); glFlush(); glutSwapBuffers(); }

Изображение слайда
24

Слайд 24: Пример управления камерой

void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(640, 480); glutInitWindowPosition(50, 50); glutCreateWindow("Пилотирование камеры вокруг чайника"); glClearColor(1.0f,1.0f,1.0f,1.0f); glColor3f(0.0f,0.0f,0.0f); glViewport(0, 0, 640, 480); Point3 Eye = {4, 4, 4}, look = {0, 0, 0}; Vector3 up = {0, 1, 0}; set(Eye, look, up); setShape(-2.0f, 2.0f, -2.0f, 2.0f, 0.0f, 10.0f); glutDisplayFunc(myDisplay); glutKeyboardFunc(myKeyboard); glutMainLoop(); }

Изображение слайда
25

Последний слайд презентации: 3. Преобразования координат: Пример управления камерой

Изображение слайда