我想在我的OpenGL应用程序中显示一些文本,并且已经使用SFML for window&上下文创建。我不想添加另一个库并尝试使用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(从源代码编译)。
答案 0 :(得分:0)
我已将字体渲染切换为ftgl,因为我没有找到任何方法来修复SFML中的渲染错误。
我怀疑我会切换回来,因为SFML-OpenGL状态冲突似乎相当普遍:
StackOverflow: SFML OpenGL Drawing Text
SFML-Forums: Crazy bug using OpenGL lighting and RenderWindow