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 Compatibilty Profile Context、3.3 GLSL、および 2.0 SFML (ソースからコンパイル) を使用しています。