我为学校创造了一个井字游戏,我基本上已经完成了。我唯一留下的是,当有人获胜时,我想在屏幕上弹出一个方框,并用大文字说“X Wins”或“O Wins”,具体取决于是谁。
我发现在openGL中绘制文本非常复杂。由于这对于作业并不重要,我不是在寻找复杂的东西,也不需要它看起来非常好看。此外,我很可能只想改变我的代码。另外,我希望在重新调整窗口大小时,文本的大小是可变的。
这就是我的文字绘图功能目前的样子。它吸引得非常小。
注意:mText是一个int [2]
数据成员,用于保存我想要绘制文本的位置
void FullGame::DrawText(const char *string) const
{
glColor3d(1, 1, 1);
void *font = GLUT_BITMAP_TIMES_ROMAN_24;
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
int len, i;
glRasterPos2d(mText[0], mText[1]);
len = (int)strlen(string);
for (i = 0; i < len; i++)
{
glutBitmapCharacter(font, string[i]);
}
glDisable(GL_BLEND);
}
答案 0 :(得分:3)
简短回答:
您正在绘制无法调整大小的位图字符,因为它们以像素为单位给出。尝试使用具有以下功能之一的笔划字符或字符串:glutStrokeCharacter
,glutStrokeString
。可以使用glscalef
调整笔画字体的大小。
答案很长:
实际上,您可以使用以下字符而不是逐字符打印文本:
glutBitmapString(GLUT_BITMAP_TIMES_ROMAN_24, "Text to appear!");
此处字体大小位于pixel
,因此缩放在直接使用时无效。
请注意,FreeGLUT中引入了glutBitmapString
,它是OpenGL实用工具包(GLUT)库的开源替代品。有关字体呈现的更多详细信息:http://freeglut.sourceforge.net/docs/api.php#FontRendering
我强烈建议使用FreeGlut而不是原始的Glut。
1 - Glut的最后一次发布是在2000年之前,所以它有一些缺失的功能:http://www.lighthouse3d.com/cg-topics/glut-and-freeglut/
2 - 两种最常见的GLUT替代品是OpenGLUT和freeGLUT,两者都是开源项目。
如果你决定使用FreeGlut,你应该有以下内容:
#include < GL/freeglut.h>
说完所有你需要的是缩放文本,因此你可以使用比位图字符串更灵活的glutStrokeString
,例如,它可以在视觉上调整大小。你可以尝试:
glScalef(0.005,0.005,1);
glutStrokeString(GLUT_STROKE_ROMAN, (unsigned char*)"The game over!");
希望有所帮助!
答案 1 :(得分:1)
最简单的方法是为每个&#34; Win&#34;生成一个纹理。屏幕并在四边形上渲染它。听起来你并不关心打印任意字符串,只有2条可能的消息。你可以在Paint或其他任何地方绘制纹理,如果你不担心质量,纹理甚至不必那么大。易于实施,完全可调整大小。