如何让OpenGL在我想要的位置绘制角色?

时间:2016-01-03 17:44:10

标签: c++ opengl

我目前正致力于在openGL中将文本绘制到屏幕上。我有一个功能,只要我不希望文本跨越多行,我真的希望文本是绿色的。显然,这并不理想。我目前使用的功能是:

void Scene::DrawString(std::string text, position pos)
{
    void* font = GLUT_BITMAP_HELVETICA_12;
    float rightOfScreen = glutGet(GLUT_WINDOW_WIDTH);

    std::vector<std::string> sentence = split(text, ' ');

    glRasterPos2f(pos.x, pos.z);
    glColor3i(0, 0, 0); //Black text
    double rasterPosition[4]; //GL raster position returns 4 doubles. It just does, and it needs to go into an array

    for (auto word : sentence)
    {
        int wordWidth = 0;
        for (char c : word)
        {
            wordWidth += glutBitmapWidth(font, c);
        }

        glGetDoublev(GL_CURRENT_RASTER_POSITION, rasterPosition);
        if (rasterPosition[0] + wordWidth > rightOfScreen)
        {
            pos.z += 1;
            glRasterPos2d(pos.x, pos.z);
        }

        for (char c : word)
        {
            glutBitmapCharacter(font, c);
        }

        glutBitmapCharacter(font, ' ');
    }
}

(位置是一个带有两个浮点数的结构 - x和z)

当我传入一个应该被包裹到下一行的字符串时,它正确地检测到应该按下该单词的时间,但是glRasterPos2d只是将第二部分覆盖在第一部分的顶部(以及修复颜色)它被渲染为绿色而不是黑色的问题。

我的问题是;我该怎么做相当于换入换行符?

1 个答案:

答案 0 :(得分:0)

你没有。

渲染第二行的方式与渲染第一行的方式相同,但略低一些。低多少取决于你的字体高度和你想要多少行填充。

在此级别,负责编写“换行符”语义!