我目前正致力于在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, ' ');
}
}
(位置是一个带有两个浮点数的结构 - x和z)
当我传入一个应该被包裹到下一行的字符串时,它正确地检测到应该按下该单词的时间,但是glRasterPos2d只是将第二部分覆盖在第一部分的顶部(以及修复颜色)它被渲染为绿色而不是黑色的问题。
我的问题是;我该怎么做相当于换入换行符?
答案 0 :(得分:0)
你没有。
渲染第二行的方式与渲染第一行的方式相同,但略低一些。低多少取决于你的字体高度和你想要多少行填充。
在此级别,你负责编写“换行符”语义!