Создание «клочка бумаги с текстом на нем» в OpenGL (специально для iOS 5) - PullRequest
3 голосов
/ 27 октября 2011

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

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

Пользователь сможет просматривать бумагу со всех сторон, как будто перед ним висит кусок бумаги.

Это тривиально в OpenGL? Как я мог начать?

Извините за действительно открытый вопрос, но я хотел понять, как это делается.

Глядя на исходный код шаблона OpenGL в примерах проектов Xcode, я вижу, что существует большой массив вершин. Я предполагаю, что для создания «плоского» прямоугольника мне просто необходимо удалить или сделать нулевую ось Z. А потом динамический текст, который будет прикреплен к поверхности плоского прямоугольника ... Я понятия не имею, как это сделать ......

1 Ответ

6 голосов
/ 27 октября 2011

На этот вопрос сложно ответить однозначно. В общем, это тривиально, но, опять же, это не так.

Рисование "плоского прямоугольника с чем-то на нем" - это пара API-вызовов, настолько простых, насколько это возможно. Рисование текста в OpenGL эффективно, качественно и без большой предварительной обработки - это совсем другая история.

То, что я хотел бы сделать, это визуализировать текст, используя тот способ, который поддерживается «обычной системой» под iOS (как вы рисуете в любом окне, я бы не знал эту конкретную деталь), но рисую в точечный рисунок , а не на экране. Это должно поддерживаться, почти каждая ОС поддерживает это по крайней мере 10-15 лет. Затем превратите это растровое изображение в текстуру, свяжите его и нарисуйте свой тривиальный плоский квад с помощью OpenGL (установите буфер вершин с 4 вершинами, каждая вершина - текстурную координату, и нарисуйте два треугольника - так легко, как это возможно).

Огромным преимуществом этого является то, что вы можете использовать установленные системные шрифты (или любые доступные шрифты), вам не нужно генерировать растровый шрифт и не нужно думать о действительно уродливых вещах, таких как подсказки и правильный интервал, и гораздо проще смешивать разные стили текста и т. д. OpenGL, конечно, также имеет встроенную поддержку текста, но это не очень эффективно или приятно. Если текст не меняется каждую миллисекунду, действительно лучше отрендерить его с помощью стандартного средства визуализации, которое обеспечивает операционная система (да, это, вероятно, не будет аппаратно ускорено, но что с того ... поскольку пользователь должен прочитать текст, скорее всего, она не будет меняться каждую миллисекунду).

Теперь становится все сложнее, если ваш «листок бумаги» тоже должен сгибаться и скручиваться или создавать эффект очистки страницы, а не просто плоский прямоугольник. В этом случае вам нужно протестировать его, что может быть сложнее, чем кажется. Не все тесселяции выглядят оптимальными для всех изгибов / скручиваний, или они имеют, но не имеют оптимального (читайте как минимум) количества вершин.

В одной из книг о GPU Gems или GPU Pro есть статья о "очистке страницы" и подобных тесселяциях, позвольте мне поискать ...

Там: Андреас Биззотто: «Устройство для чтения электронных книг на основе шейдеров - эффект очистки страницы», GPU Pro2, с. 278-299

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

...