Как сбросить позицию X символа в FreeType

Я хочу разбить строку, введя '\n' в строку и отобразить текст.

В настоящее время, если я пытаюсь разорвать строку после ввода '\n', вывод рендеринга выглядит следующим образом. введите здесь описание изображения

Я хотел бы, чтобы вторая строка была выровнена с первой строкой.

это код

// Iterate through all characters
    std::string::const_iterator c;
    for (c = text.begin(); c != text.end(); c++)
    {
        Character ch = Characters[*c];

        GLfloat xpos = x + ch.Bearing.x * scale;
        GLfloat ypos = y - (ch.Size.y - ch.Bearing.y) * scale;

         // i check the input here          
       //   if( *ch == '\n')
         //  Reset the Xpos value in the freetype.

        GLfloat w = ch.Size.x * scale;
        GLfloat h = ch.Size.y * scale;
        // Update VBO for each character
        GLfloat vertices[6][4] = {
            { xpos,     ypos + h,   0.0, 0.0 },            
            { xpos,     ypos,       0.0, 1.0 },
            { xpos + w, ypos,       1.0, 1.0 },

            { xpos,     ypos + h,   0.0, 0.0 },
            { xpos + w, ypos,       1.0, 1.0 },
            { xpos + w, ypos + h,   1.0, 0.0 }           
        };
        // Render glyph texture over quad
        glBindTexture(GL_TEXTURE_2D, ch.textureID);
        // Update content of VBO memory
        glBindBuffer(GL_ARRAY_BUFFER, VBO);
        glBufferSubData(GL_ARRAY_BUFFER, 0, sizeof(vertices), vertices); 
        glBindBuffer(GL_ARRAY_BUFFER, 0);
        // Render quad
        glDrawArrays(GL_TRIANGLES, 0, 6);
        x += (ch.Advance >> 6) * scale; 
    }

Хотя мне удалось добиться этого, увеличив переменную с плавающей запятой на заданное значение и вычтя переменную из xpos. Что, по моему мнению, является обходным путем.

Есть ли у нас какая-либо функция в фритайпе для сброса Xpos шрифта в исходное положение.


person Community    schedule 04.12.2019    source источник
comment
Есть ли у нас какая-либо функция в FreeType для сброса Xpos шрифта в начальную позицию? - Шрифт не имеет начальной позиции. Положение глифа x контролируется вашим кодом (freetype не может знать, как вы это делаете). Что такое x в начале? Сбросить x, определить перевод строки (y = y + linefeed) и continue цикл.   -  person Rabbid76    schedule 04.12.2019


Ответы (1)


Вы можете сделать что-то вроде этого.

std::vector<std::string> stdvecInput;
boost::split(stdvecInput, stdstrTxt, boost::is_any_of("\n"), boost::token_compress_on);

for (auto &str : stdvecInput)
{
   for (cTmp = str.begin(); cTmp != str.end(); cTmp++) 
      {
           // Draw your font.
      }
 }
person Community    schedule 04.12.2019