【发布时间】:2014-01-30 22:48:47
【问题描述】:
文本渲染是大多数新手难以理解的主题之一。而现在,我被困在这里。好吧,我想问一下我的方式是渲染文本的好主意.. OpenGL 没有将文本渲染到屏幕的内置功能,这让我感到困惑。 搜索后,文本渲染使用的是位图。
加载并绑定位图字体纹理 -> 解析文本并生成并绑定顶点数组,将纹理映射到 uv 数组,... -> 将其渲染到屏幕上
好的,这可能可以解决如何呈现文本,但我仍然卡住了。 (例如)如果我使 基于计时器的文本 每 毫秒 更改一次(因为我绘制文本就像:分:秒:米秒)这不是一个好主意对?因为当我想更改文本时,我必须重复该算法。我想如果我们继续使用位图,机器会变慢。
好吧,看到位图文本渲染太慢了,我想办法在没有位图的情况下渲染文本 也许会好起来?这就是我在这里问的原因
这里是我用 3d Vertex + GLOrtho 绘制角色模型的方法,看看我的矢量字体代码(示例) 如何用Vector画出“L”字
const float MAX_HEIGHT = 18.0f; //set maximum height of character
const float MAX_WIDTH = 20.0f; //set maximum width of character
void drawL(GLfloat x,GLfloat y){
glPushMatrix();
//i've set before glOrtho(0, Window.width, Window.height, 0, 0, 1);
glTranslatef(x,y,0.0f);
glBegin(GL_QUADS);
glVertex3f(0.0f,0.0f,0.0f); //draw vertical quad
glVertex3f(3.0f,0.0f,0.0f);
glVertex3f(3.0f,MAX_HEIGHT,0.0f);
glVertex3f(0.0f,MAX_HEIGHT,0.0f);
glNormal3f(0.0f,MAX_HEIGHT,0.0f); //draw horizontal quad
glVertex3f(2.0f,MAX_HEIGHT,0.0f);
glVertex3f(MAX_WIDTH - 10.0f,MAX_HEIGHT,0.0f);
glVertex3f(MAX_WIDTH - 10.0f,MAX_HEIGHT - 3.0f,0.0f);
glVertex3f(2.0f,MAX_HEIGHT - 3.0f,0.0f);
glEnd();
glPopMatrix();
}
如果我们用矢量/GL_QUAD 顶点绘制字符有一些优点,如果你想调整字体大小不会变得模糊。
如果我制作基于计时器的文本每毫秒更改一次,现在的问题会变慢吗? 通过这种方式,如果我要更改文本,重复算法是不必要的。它们甚至不会消耗太多资源,因为它不是位图,它只是矢量渲染。
【问题讨论】:
标签: c++ opengl bitmap rendering text-rendering