我试图将字符串渲染到屏幕上,但我无法让它工作
我使用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。这很奇怪。
答案 0 :(得分:0)
使用c ++字符串并遍历字符串以绘制每个字母。如果这没有帮助,那么在渲染文本之前尝试禁用混合或光照。您是否设法使用glutBitmapCharacter()函数显示文本,然后将其放入&#39;文本&#39;类?如果是这样,您可能对数据在文本类中的保存方式有疑问。同样,我建议在文本类中使用字符串对象(而不是char *),并使用string :: iterator循环遍历字符串。
我目前不在我的电脑旁边,但我稍后会发布一些代码,因为我正在开展一个类似的项目并且正在运行文本等。
我注意到你正在使用glortho2d并使用&#39; raster2d&#39;但是在绘制文本之前,您尚未禁用深度测试。我使用&#39; raster3f&#39;在glortho环境中它允许分层文本和对象等,并且不需要禁用深度测试等。
此外,在文本构造函数中,您传入指向&#34; std :: list *&#34;的指针。但是不是通过引用自动传递的STL容器吗?
稍后当我在我的电脑上
时,我会更有帮助