2013-05-02 4 views
1

У меня есть приложение, его небольшая игра с использованием opengles с GLKit. Нет, мне интересно, как это работает, когда я хочу нарисовать текст на моем экране (если это возможно).Xcode GLKit печать Текст на GLKView без использования UIImages

Как я могу это сделать?

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

но выяснить, как она работает, чтобы напечатать текст на этой glkview заставляет меня глубоко внутри проблемы ^^

Я не хочу использовать UIImages, потому что я также не знаю, как представить UIImages на glkview.

ответ

0

Есть несколько способов, чтобы сделать то, что вы хотите:

1) Есть изображение со все текстовыми символами, которые необходимы в нем. Например, если ваше приложение находится на английском языке, у вас будет 26 прописных и 26 строчных букв на изображении. Загрузите эту текстуру на графический процессор и используйте правильные координаты текстуры или glSubTexImage2d(), чтобы вытащить нужные вам глифы. (Мне непонятно, если это то, что вы имели в виду, не желая UIImage. Это не должно быть UIImage, хотя это, вероятно, проще всего.)

2) Каждый раз, когда вам нужно отображать текст, нарисуйте его на процессоре «на лету» и загружать все слово, фразу или предложение в виде текстуры. Вы можете создать CGBitmapContext и использовать Core Graphics для рисования текста. Затем загрузите его, используя glTexImage2D().

3) Получите отдельные глифы из шрифтов и рисуйте напрямую, используя кривые Безье, составляющие глифы. Это также позволяет выполнять трехмерную экструзию. Однако этот параметр является наиболее трудоемким для кода и, вероятно, наименее результативным. Это также связано с множеством мелких проблем, которые имеют шрифты (например, вырожденные сегменты и неправильные заказы на намотку). ЕСЛИ вы хотите пойти по этому пути, я думаю, возможно, Core Text может помочь.

0

Существует, по крайней мере, два чистых способа сделать это, в зависимости от ваших требований.

В то время как документация советует не создавать композицию поверх CAEAGLLayer (GLKView), она работает достаточно хорошо, по крайней мере, в последних версиях iOS, когда прозрачный контент накладывается поверх CAEAGLLayer. Например, попробуйте сбросить UITextView, с непрозрачным набором на false и очистить цвет фона, поверх GLKView в вашей раскадровке в интерфейсе Builder в шаблоне Apple GLKit или в вашем приложении. В моем тесте на iPhone 5 время рендеринга кадра оставалось около 1 мс, даже при прокрутке в текстовом представлении. Если ваш текст необходим, или вы не хотите, чтобы пользователь взаимодействовал с текстом, используйте CATextLayer как дочерний слой вашего EAGLLayer вместо представления.

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

 Смежные вопросы

  • Нет связанных вопросов^_^