Как преобразовать 3D-матрицу OpenGL в CoreAnimation CATransform3Ds? - PullRequest
1 голос
/ 04 мая 2011

Изображение поверхности рендеринга OpenGL ES 1.1 с прозрачным слоем CALay из того же кадра и границ непосредственно над ним.Объекты в сцене OpenGL преобразуются (переводятся и вращаются) с использованием матрицы 4x4.Наложенный слой CALayer преобразует подслои с помощью CATransform3D (, которая оказывается матрицей 4x4, идентичной тем, которые используются для преобразований OpenGL ).

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

Проблема в том, что(Я думаю), что моя сцена OpenGL и «сцена» CALayer не согласны с определением произвольного «элемента сцены», и это несоответствие проявляется как несоответствия в переводе подслоя и переводаобъекта сцены (Вращения в порядке).В частности, CALayer, похоже, работает с пониманием того, что единица сцены очень близко соответствует пикселю экрана, тогда как моя сцена OpenGL использует гораздо большие единицы, то есть CALayer транслирует только небольшую часть того, что делает объект сцены.

Итак, я ищу способ математического преобразования матричного преобразования, указанного в моих единицах сцены OpenGL, в функционально эквивалентное матричное преобразование, указанное в модуле CALayer-scene.Мне нужно иметь возможность определять модуль CALayer-scene в терминах моего модуля сцены OpenGL, но я понятия не имею, как CALayer взаимодействует с OpenGL за кулисами.

Можно ли рассчитать конверсиюв таком случае?Если нет, есть ли другие подходы, которые могут помочь?

ПРИМЕЧАНИЕ: я смог решить проблему с помощью чисто эмпирического подхода, который в основном сводится к тому, что необходимо внести изменения в CATransform3D, чтобы сделатьэто работает в паре позиций и экстраполируя.Я надеюсь на что-то более точное.

1 Ответ

4 голосов
/ 04 мая 2011

Я предполагаю, что проблемы вызваны матрицей проекций представления OpenGL.Помните, что трансформация из мира в вид - это view_point = projection x modelview x world_point.

...