2012-01-20 2 views
1

Пусть следующие матрицы будут в левше системы координат (столбцы)Матрица просмотра проекций, opengl. IOS

Я использую GLKMatrix4x4 структуры и функции Apple, поэтому математические операции можно считать правильными.

Я ожидаю, что следующее приведет к правильной матрице.

projectionViewModel = camera.projection * camera.view * model.view 

Однако это неверно, так как модель начинает вращаться относительно смещения перевода камеры.

Но когда я делаю следующее, результат правильный.

projectionViewModel = camera.projection * camera.inverseView * model.view 

Мой вопрос в том, что я испортил что-то еще где? Или это правильный способ получения матрицы projectionViewModel?

GLKMatrix4 modelView = GLKMatrix4Multiply(*[_scene.camera inverseView],*[_frame worldMatrix]); 

GLKMatrix4 projectionViewModel = GLKMatrix4Multiply(*[_scene.camera proj],modelView); 

ответ

2

Подумайте об этом с точки зрения того, что вы хотели бы сделать с объектом, расположенным непосредственно на камере. Итак, у вас есть camera.view = model.view. В этом случае то, что вы действительно хотите, зависит от того, что делает камера и что делает модель, чтобы размножаться вместе, чтобы сделать матрицу идентичности, потому что вы не хотите, чтобы преобразование было применено до проекции.

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

Итак, вы ничего не испортили - вторая формула, которую вы даете, и то, что вы говорите, дает правильные результаты.

+0

Закончилось двойное предположение – Nico