我想在我的 OpenGL 应用程序中显示一些文本,并且已经在使用 SFML 来创建窗口和上下文。我不想添加另一个库并尝试使用 SFML (2.0) 提供的文本呈现。
呈现的文本由白色矩形组成(矩形与它们应该大致显示的字符的高度相匹配)。
在我添加了一些方法以保持 OpenGL 状态与使用 SFML 文本之前的状态相同之后,其他所有内容都正确呈现。如果没有这些方法,则不会渲染任何内容,但会使用正确的颜色缓冲区清除颜色。
我使用 GLSL 进行纹理和照明(如果需要,可以提供源和屏幕截图)。
我使用的代码:
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
//rotations for looking around & moving the camera
glRotatef(camera.rotation[0], 1.0f, 0.0f, 0.0f);
glRotatef(camera.rotation[1], 0.0f, 1.0f, 0.0f);
glRotatef(camera.rotation[2], 0.0f, 0.0f, 1.0f);
glTranslatef( -5.0f+camera.translation[0],
camera.translation[1], -7.5f+camera.translation[2]);
//set OpenGL light attributes
passPosition(GL_LIGHT0, spotLight);
passSpotDirection(GL_LIGHT0, spotLight);
passPosition(GL_LIGHT1, greenLight);
passPosition(GL_LIGHT2, redLight);
passPosition(GL_LIGHT3, blueLight);
glUseProgram( shaderProg.getId() );
renderMap();
glUseProgram(0);
window.pushGLStates();//supposed to prevent OpenGL & SFML conflicts
window.draw(testText);
window.popGLStates();
err = glGetError();//doesn't report any errors
if(err != GL_NO_ERROR)
{
std::cout << "ERROR: " << err << std::endl;
}
window.display();
文本实例是这样创建的:
sf::Font fontVera;
std::cout << fontVera.loadFromFile("./res/Vera.ttf") << std::endl;
//the font is existing, output for debugging purposes(and shows no error)
sf::Text testText("hasdfas", fontVera, 32);
testText.setPosition(10,10);
我正在使用 3.3 兼容性配置文件上下文、3.3 GLSL 和 2.0 SFML(从源代码编译)。