Проекционная матрица, OpenGLES.IOS - PullRequest
1 голос
/ 20 января 2012

Пусть следующие матрицы находятся в левой системе координат (основной столбец)

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

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

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);

1 Ответ

2 голосов
/ 20 января 2012

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

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

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

...