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

C++ 如何让OpenGL在我想要的位置绘制角色?,c++,opengl,C++,Opengl,我目前正在使用openGL将文本绘制到屏幕上。我有一个函数,只要我不希望文本跨越多行,我真的希望文本是绿色的,它就可以工作。显然,这并不理想。我目前使用的功能是: void Scene::DrawString(std::string text, position pos) { void* font = GLUT_BITMAP_HELVETICA_12; float rightOfScreen = glutGet(GLUT_WINDOW_WIDTH); std::vect

我目前正在使用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, ' ');
    }
}
void场景::抽绳(std::字符串文本,位置位置)
{
void*font=GLUT\u BITMAP\u HELVETICA\u 12;
屏幕右侧浮动=glutGet(GLUT\u窗口\u宽度);
标准::向量句子=拆分(文本“”);
glRasterPos2f(位置x,位置z);
glColor3i(0,0,0);//黑色文本
double rasterPosition[4];//GL rasterPosition返回4个双精度。它只返回4个双精度,需要放入数组中
for(自动单词:句子)
{
int字宽=0;
for(字符c:word)
{
wordWidth+=位图宽度(字体,c);
}
glGetDoublev(当前光栅位置,光栅位置);
if(光栅位置[0]+字宽>屏幕右侧)
{
位置z+=1;
glRasterPos2d(位置x、位置z);
}
for(字符c:word)
{
glutBitmapCharacter(字体,c);
}
glutBitmapCharacter(字体“”);
}
}
(Position是一个具有两个浮动(x和z)的结构)

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

我的问题是,;我如何做与输入换行符等效的操作?

您不需要

渲染第二行的方式与渲染第一行的方式相同,但稍微低一点。降低多少取决于字体高度和所需的行距


在这个级别上,您负责编写“换行符”语义

我不确定我是否听懂了。我认为使用增加的“y”值执行glRasterPos2f调用,然后继续调用glutBitmapCharacter应该可以换行thing@Yann当前位置我很困惑。你刚才不是在问题中说那不会发生吗?那么,你现在为什么期望它发生呢?你看过文件了吗?!我不想说这是一个全面的阅读,但我想我明白了。对它的第一次调用正确地设置了字符串的起始位置,因为它是一个字符接一个字符地绘制的,所以我假设对glPosition的任何后续调用都应该按原样重置“回车”。@Yann:现在你知道了假设的作用了:)OpenGL不是文字处理器;它不会呈现“段落”。相反,应用程序(如您的应用程序)呈现“段落”,它们使用OpenGL的原始功能来实现这一点。自动推进x位置的功能就是你所能得到的,好吧。你的模型视图和投影变换是什么?传递给
glRasterPos()
的位置将使用当前转换进行转换。根据设置变换的方式,每行可能只移动1个像素,因为在该位置上添加了1个像素。