Разделы презентаций


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

Содержание

Вектор в однородной форме

Слайды и текст этой презентации

Слайд 13. Преобразования координат

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

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

Вектор в однородной форме

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

Переход к новой системе координат

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

Координатный фрейм

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

(или локальная) система координат.

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

Слайд 6Объектная система координат
Использование объектных координат сильно облегчает жизнь при создании

моделей объектов. Разные модели никак не зависят друг от друга

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

Слайд 7Мировая система координат
Для того, что бы составить из нескольких объектов

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

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

Слайд 8Мировая система координат
Расположение и ориентация объектов сводится к переносу модели

из объектной системы координат в мировую.
Мировой называют систему координат, используемую

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

Слайд 9Система координат камеры
После того, как объекты помещены на сцену (в

мировую систему координат!), самое время подумать о том, где и

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

Слайд 10Система координат камеры
1
2
3
1
2
3
Помещая камеру в различные точки сцены мы имеем

возможность акцентировать внимание зрителя на различных частях сцены

Система координат камеры123123Помещая камеру в различные точки сцены мы имеем возможность акцентировать внимание зрителя на различных частях

Слайд 11Система координат камеры
Система координат, в которой точка отсчета привязана к

камере, используется в процессе отображения объектов на экран.
«Поместить камеру на

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

Слайд 12Система координат камеры
y
x
z
В библиотеках Direct3D и OpenGL оси системы координат

камеры ориентированы следующим образом: Ox - слева на право, Oy

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

Слайд 13Положение наблюдателя
void gluLookAt(
GLdouble ex, GLdouble ey, GLdouble ez, GLdouble

cx, GLdouble cy, GLdouble cz, GLdouble upx, GLdouble

upy, GLdouble upz
);
Положение наблюдателяvoid gluLookAt(	GLdouble ex,  GLdouble ey, GLdouble ez, GLdouble cx,  GLdouble cy,  GLdouble cz,

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

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

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

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

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

Пример

Слайд 17Пример управления камерой
#include
#define _USE_MATH_DEFINES
#include

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;

Пример управления камерой#include #define _USE_MATH_DEFINES#include struct Point3{	double x;	double y;	double z;};struct Vector3{	double x;	double y;	double z;};Point3 eye, look;Vector3 up;Vector3

Слайд 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);
}
Пример управления камерой//Загрузка матрицы моделирования-вида существующими для камеры величинамиvoid setModelViewMatrix(void){	float m[16 ];	Vector3 eVec;	eVec.x = eye.x; eVec.y =

Слайд 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();
}
Пример управления камерой// Создание матрицы моделирования-видаvoid set(Point3 Eye, Point3 Look, Vector3 Up){	eye = Eye; look = Look;

Слайд 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();
}
Пример управления камерой//Скольжениеvoid slide(float delU, float delV, float delN){	eye.x += delU * u.x + delV * v.x

Слайд 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();
}
Пример управления камерой//Тангажvoid pitch(float angle){	float cs = cos(M_PI / 180 * angle);	float sn = sin(M_PI / 180

Слайд 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);
}
Пример управления камерой//Поворот камеры вокруг оси vvoid rotate(float angle){	float cs = cos(M_PI / 180 * angle);	float sn

Слайд 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();
}
Пример управления камеройvoid myKeyboard(unsigned char key, int x, int y){	switch(key)	{		case '1': slide(0, 0, 0.2); break;  //

Слайд 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();
}
Пример управления камеройvoid main(int argc, char **argv){	glutInit(&argc, argv);	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);	glutInitWindowSize(640, 480);	glutInitWindowPosition(50, 50);	glutCreateWindow(

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

Пример управления камерой

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика