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

How can I get OpenGL to draw the character at the location I want?

本文关键字:位置 绘制 角色 我想要 OpenGL      更新时间:2023-10-16

我目前正在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, ' ');
    }
}

(Position是一个有两个浮点的结构-x和z)

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

我的问题是;我该如何做相当于放入换行符的操作?

您没有。

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

在这个级别上,负责编写"换行"语义!