文本无法使用GLUT渲染

时间:2014-12-30 22:17:41

标签: c++ opengl glut freeglut

我试图将字符串渲染到屏幕上,但我无法让它工作

我使用freeglutvisual studio 2013。这是我的glutinit

glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA); // Double buffering, RGB format
glutInitWindowSize(width, heigth);
glutInitWindowPosition(0, 0);
glutCreateWindow("Project Demeter");
glClearColor(1.0, 1.0, 1.0, 1.0);

glColor3f(1.0, 1.0, 1.0);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, width, heigth, 0.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glEnable(GL_BLEND);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);

和我的文字图:

void text::draw()
{
    glColor3ub(_color[0], _color[1], _color[2]);
    glRasterPos2f(_x, _y);
    glDisable(GL_TEXTURE);
    glDisable(GL_TEXTURE_2D);
    for (char& c : _str)
    {
        glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, c);
    }
}

但是当我创建文本时,屏幕上没有画出任何内容:

float clr[3] = { 0, 0, 0 };
text* txt = new text(&DrawList, "test1234", clr, 600, 600);

有谁知道我做错了什么以及如何解决这个问题?

编辑:通过请求构造函数:

text::text(std::list<item*>* BaseList, const string str, const float color[3], int x, int y)
:item(BaseList)
{   
    if (str == "")
    {
        assert(0);
    }

    _str = str;

    _x = x;
    _y = y;

    if (!color) {      // When a null pointer is passed to this function
        _color[0] = 0;// black is used
        _color[1] = 0;
        _color[2] = 0;

    }
    else { //else copy it over
        copy_array(color, _color);
    }
}

EDIT2:所以我在Windows 8机器上进行了测试,它在那里工作了吗?跆拳道?我正常使用w7。这很奇怪。

1 个答案:

答案 0 :(得分:0)

使用c ++字符串并遍历字符串以绘制每个字母。如果这没有帮助,那么在渲染文本之前尝试禁用混合或光照。您是否设法使用glutBitmapCharacter()函数显示文本,然后将其放入&#39;文本&#39;类?如果是这样,您可能对数据在文本类中的保存方式有疑问。同样,我建议在文本类中使用字符串对象(而不是char *),并使用string :: iterator循环遍历字符串。


我目前不在我的电脑旁边,但我稍后会发布一些代码,因为我正在开展一个类似的项目并且正在运行文本等。

我注意到你正在使用glortho2d并使用&#39; raster2d&#39;但是在绘制文本之前,您尚未禁用深度测试。我使用&#39; raster3f&#39;在glortho环境中它允许分层文本和对象等,并且不需要禁用深度测试等。

此外,在文本构造函数中,您传入指向&#34; std :: list *&#34;的指针。但是不是通过引用自动传递的STL容器吗?

稍后当我在我的电脑上

时,我会更有帮助