Существует ли достойная текстовая библиотека рисунка OpenGL для iPhone SDK?

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

Если вы хотите выполнить что-то еще полностью, вы можете переопределить переменные $spacer-x, $spacer-y или $spacers. Их значения по умолчанию следующие:

$spacer := 16px
$spacer-x := $spacer
$spacer-y := $spacer
$spacers := {
  zero: {
    x: 0,
    y: 0
  },
  one: {
    x: ($spacer-x * .25),
    y: ($spacer-y * .25)
  },
  two: {
    x: ($spacer-x * .5),
    y: ($spacer-y * .5)
  },
  three: {
    x: $spacer-x,
    y: $spacer-y
  },
  four: {
    x: ($spacer-x * 1.5),
    y: ($spacer-y * 1.5)
  },
  five: {
    x: ($spacer-x * 3),
    y: ($spacer-y * 3)
  }
}

( источник ) sup>

Если изменение общих полей компонентов vuetify не является тем, чем вы являетесь после этого вы можете просто определить свои собственные служебные классы, которые выходят за пределы m-5 / p-5.

24
задан genpfault 18 April 2011 в 20:34
поделиться

6 ответов

Ваше описание использования freetype для создания атласа структуры наряду со всей информацией о глифе точно, что я делаю в своем текущем проекте iPhone.

я выполняю во всем парсинге шрифта предварительно обрабатывать шаг (Все в C# в Windows, как это происходит). Сам атлас сгенерирован и содержит только необходимые символы - для сокращения пространства, я также иногда заканчиваю тем, что генерировал больше, чем единственный атлас для хранения размеров структур pow2 и разумного разрешения.

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

Если это имеет значение, это - то, как я определяю символ глифа в своем небольшом механизме:

struct FontGlyph
{

u32 char_code;

u32 m_x;                // base x position on tpage

u32 m_y;            // base y position on tpage

u32 m_width;            // glyph width

u32 m_height;           // glyph height

i32 m_horiBearingX;     // Distance to X shift

i32 m_horiBearingY;     // Distance to Y shift

u32 m_horiAdvance;      // Total Horizontal advance this character requires

u32 m__tpage_index;     // Which tpage does this glyph use?

};

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

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

Не стесняются отвечать или комментировать, нужны ли Вам какие-либо другие детали. (И удача :)

<час>

Ответ на Ваш комментарий, когда я выбежал из комнаты в разделе комментария...

Выезд freetype документация, это в основном дает Вам данные глифа без бездельничания, это просто вытягивает его прямо из шрифта. Что касается самих структур, Вы заставляете freetype представлять каждый глиф и затем управлять этим для создания структуры. Это я делаю как предварительно обрабатывание совершенно отдельного от моего главного приложения.

Вот выборка моего кода инструмента, который делает это: http://pastebin.com/md1c6354

отметьте, хотя, это только когда-либо предназначалось для моих глаз и не для всеобщего использования, так извините факт, это грязно как ад :)

8
ответ дан Richard J. Ross III 28 November 2019 в 23:23
поделиться

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

UIGraphicsBeginImageContext(yourLabel.frame.size);
[yourLabel.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *layerImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

для получения UILabel к UIImage. Вы могли затем использовать initWithImage: конструктор класса Texture2D в проекте CrashLanding преобразовать это к структуре.

Это похоже на initWithImage: в том примере повторно представляет UIImage к растровому контексту и использованию что создать структуру. С небольшой работой Вы могли извлечь соответствующие нормы из того метода и изменить вышеупомянутый код для рендеринга слоя непосредственно в структуре.

Таким образом, Вы получаете хороший Unicode и поддержку шрифта UILabel при создании текста для структуры.

22
ответ дан Brad Larson 28 November 2019 в 23:23
поделиться

Проверьте демонстрацию аварийной посадки. Класс Texture2D, который обеспечивается, допускает создание структур с текстом и шрифтом. (Надо надеяться, будет лучший ответ, который я любил бы более простой способ нарисовать к представлению opengles)

1
ответ дан Nick Van Brunt 28 November 2019 в 23:23
поделиться

Я нашел простое решение этого. Вот быстрая функция, которую я записал для него. (Вам будет нужен класс Texture2D.)

- (void) drawText:(NSString*)theString AtX:(float)X Y:(float)Y {
// Use black
glColor4f(0, 0, 0, 1.0);

// Set up texture
Texture2D* statusTexture = [[Texture2D alloc] initWithString:theString dimensions:CGSizeMake(150, 150) alignment:UITextAlignmentLeft fontName:@"Helvetica" fontSize:11];

// Bind texture
glBindTexture(GL_TEXTURE_2D, [statusTexture name]);

// Enable modes needed for drawing
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_VERTEX_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

// Draw
[statusTexture drawInRect:CGRectMake(X,Y-1,1,1)];   

// Disable modes so they don't interfere with other parts of the program
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisableClientState(GL_VERTEX_ARRAY);
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);    
}

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

6
ответ дан 28 November 2019 в 23:23
поделиться

Спасибо за тот метод. Это сэкономило мне некоторое время.

Была пара вещей, которые я должен был изменить все же. Вызов glBlendFunc должен был быть:

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_ALPHA)

И во-вторых, текст, казалось, вовлекал единственную точку. Вызов CGRectMake создает 1x1 прямоугольник, если я не читаю это неправильно.

3
ответ дан 28 November 2019 в 23:23
поделиться

Используйте библиотеку шрифтов «раздувания»:

http://www.themusingsofalostprogrammer.com/2010/01/how-to-dofont-rendering-in-opengl-on.html

Font font("Verdena");
font.print("Hello World!", x, y, z);

)

Он поставляется с поддержкой Unicode, грузы глифов «по требованию», и даже имеет способ выводить переменные

font.print(x, y, z) << "fps: " << fps;
3
ответ дан 28 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: