Обертывание / деформация CALayer / UIView (или OpenGL) в 3D (iPhone) - PullRequest
7 голосов
/ 08 марта 2010

У меня есть UIView (и, следовательно, CALayer), который я пытаюсь деформировать или слегка согнуть в трехмерном пространстве. То есть, представьте, что мой UIView - это плоская этикетка, которую я хочу частично обернуть вокруг пивной бутылки (не на 360 градусов вокруг, а только на одной «стороне»).

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

Как мне этого добиться?

Ответы [ 3 ]

3 голосов
/ 11 марта 2010

Лучшее, что вы можете сделать с Core Animation, - это сделать кусочно-линейное приближение.

Например, вы можете разделить ваш «цилиндр» на восемь сегментов и расположить их так:

  _
 / \
|   |

Вы можете дать им одно и то же изображение, но изменить перевод так, чтобы они выстраивались по краям. Затем дайте каждому преобразование (либо простое горизонтальное сжатие, либо что-то вроде «краеугольного камня», если вы собираетесь посмотреть в перспективе).

В действительности вы, вероятно, захотите использовать более восьми сегментов. Обратите внимание, что они будут сосредоточены вблизи краев вашего обзора.

Эта анимация CSS может вдохновить вас.

2 голосов
/ 15 марта 2010

Взгляните на пример кода Apple PVRTextureLoader Это проект OpenGL, который демонстрирует, как отобразить текстуру (ваш ярлык) на поверхности (на цилиндре в вашем случае).

Джефф Ламарч опубликовал хороший учебник , чтобы начать работу с Open GL.

1 голос
/ 16 марта 2010

На этой странице есть несколько примеров "искажения": http://www.sgi.com/products/software/opengl/examples/more_samples/

Я (честно) не уверен, как это сделать, но у меня уже есть эта страница, которая была добавлена ​​в закладки на некоторое время, чтобы попытаться деформировать / перевернуть UIView с сеткой / сеткой.

Удачи.

^. ^

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...