OpenGL понимают две точки зрения, чтобы увидеть преобразование модели

Есть две точки зрения, чтобы понять преобразования модели, я прочитал из Красной книги 7-е издание,[Великий, Фиксированная система координат ] и [Перемещение локальной системы координат ].

Мой вопрос:

В чем разница между двумя точками зрения и когда их использовать в определенной ситуации?

дополнительная контекстная информация:

Я хотел бы дать вам некоторый контекст, чтобы помочь мне, или вы можете просто проигнорировать ниже детали.

Я понял эти две точки зрения следующим образом. Думаю, у меня есть следующий код: (такие функции, как glTranslatef, устарели, заменены библиотекой математики, но теория может помочь.)

//render the sence,and use orthogonal projection
void display( void )
{   
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    drawAixs(4.8f);//draw x y z aixs,4.8 is axis length
    glRotatef(45.0,0.0,0.0,1.0);
    glTranslatef(3.0,0.0,0.0);
    glutSolidCube(2.0);
    glutSwapBuffers();
}

Из локального координатного представления:

С этой точки зрения мы можем понять это следующим образом:

И текущая матрица преобразования (CTM):

Из глобального представления с фиксированными координатами:

С этой точки зрения мы можем получить:

1 ответ

Решение

Две системы координат - это просто соглашение. Всегда существует одна глобальная система координат, но может быть много локальных систем. Понятие локальной системы - это всего лишь соглашение. Общая матрица преобразований M трансформирует вершины из одного пространства в другое:

v' = M * v

Чтобы v находится в одном координатном пространстве и v' находится в другом. В случае M описывает положение объекта, мы говорим, что он помещает вершины из локальной системы координат объекта в систему координат глобального мира. С другой стороны, если он описывает положение и проекцию камеры, он помещает вершины из мировой системы координат в другую локальную систему координат глаза.

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

Обычно один использует object space где вершины моделей определены, world space который является глобальным пространством, где координаты могут быть связаны друг с другом, и camera space или же eye space что пространство экранных координат. Но с появлением шейдеров OpenGL 3 это совершенно произвольно: вы можете написать свой шейдер так, чтобы он использовал единственную матрицу, которая преобразует вершины из пространства объектов непосредственно в пространство экрана. Поэтому не беспокойтесь о координатных кадрах, просто сосредоточьтесь на поставленной задаче - что именно вы хотите отобразить и как объекты должны двигаться (относительно друг друга или относительно некоторой общей ссылки).

Другие вопросы по тегам