【发布时间】:2014-12-30 22:17:40
【问题描述】:
我正在尝试将一个字符串渲染到屏幕上,但我无法让它工作
我使用freeglut 和visual 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。这很奇怪。
【问题讨论】:
-
发布您的文本 ctor 代码。
-
在这里扮演明显的船长,但你在画框结束时打电话给
glutSwapBuffers()吗?背景颜色出现了吗? -
@RetoKoradi 是的,我使用它,但这里没有显示,是的,其他所有东西都显示出来了(线条和像素)
-
@Anonymous 我编辑了 OP 以包含它
-
好的,让我们深入挖掘一下。为什么在浮动上使用 glColor3ub?这可能是次要的事情,因为你的颜色是黑色的。现在关于 w8/w7 的差异,听起来像是在某处使用了未初始化的变量。它们可以有不同的(随机值)。您是否逐步调试渲染,以便确保您的 text::draw 至少被执行?