Проблемы при рендеринге шрифта в GLFW с использованием библиотеки GLC - PullRequest
0 голосов
/ 17 мая 2018

Я использую библиотеку glc для визуализации шрифта в контексте окна glfw.Однако я не могу установить координаты шрифта.Он всегда отображает шрифт в позиции (0,0) (то есть в левом нижнем углу).

Ниже приведен код для рендеринга образца строки с использованием библиотеки GLC,

int main(){
    GLint ctx, myFont;

    if (!glfwInit())
        exit(EXIT_FAILURE);

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0);
    GLFWwindow* window = glfwCreateWindow(500, 500, "font rendering", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        exit(EXIT_FAILURE);
    }
    glfwMakeContextCurrent(window);
    glewExperimental = GL_TRUE;
    glfwSwapInterval(1);
    if ( GLEW_OK != glewInit( ) )
        {
        std::cout << "Failed to initialize GLEW" << std::endl;

        }


 ctx = glcGenContext();
 glcContext(ctx);
 myFont = glcGenFontID();
 glcNewFontFromFamily(myFont, "Palatino");
 glcFontFace(myFont, "Normal");
 glcFont(myFont);

 glViewport(0, 0, 500, 500);
 glMatrixMode(GL_PROJECTION); // make the projection matrix the current matrix
 glLoadIdentity();            // init the projection matrix by the identity matrix
 glOrtho(0.0, 500.0, 500.0, 0.0, -1.0, 1.0); // top-left (0, 0); bottom-right (500, 500)
  glcScale(100,100);
  glcRenderString("Sample Text");
 glMatrixMode(GL_MODELVIEW);  // make the modelview matrix the current matrix
 glLoadIdentity();            // init the modelview matrix by the identity matrix


glfwSwapBuffers(window);

while(!glfwWindowShouldClose(window)){

}

Здесь glTranslatef(100,100, 0); не работает, и если я использую glRasterPos3f(x,y,z);, тогда на экран ничего не будет выведено.

Я что-то здесь упустил?

1 Ответ

0 голосов
/ 17 мая 2018

Матрица проекции описывает, как объекты проецируются на область просмотра. Если матрица проекции отсутствует, объекты должны быть установлены в нормализованном пространстве устройства, где все координаты находятся в диапазоне [-1.0, 1.0].

Поскольку вы хотите рисовать в 2D, я рекомендую установить ортографическую проекцию, которая отображает пространство вида 1: 1 в координаты окна.
Для этого используйте glOrtho и используйте glMatrixMode для переключения между стеком матрицы проекции и стеком матрицы вида модели:

glViewport(0, 0, 500, 500);

glMatrixMode(GL_PROJECTION); // make the projection matrix the current matrix
glLoadIdentity();            // init the projection matrix by the identity matrix
glOrtho(0.0, 500.0, 500.0, 0.0, -1.0, 1.0); // top-left (0, 0); bottom-right (500, 500)

glMatrixMode(GL_MODELVIEW);  // make the modelview matrix the current matrix
glLoadIdentity();            // init the modelview matrix by the identity matrix

glcScale(100,100);

.....

glcRenderString отображает строку с использованием glBitmap соответственно glDrawPixels. Из-за того, что положение должно быть установлено glRasterPos.

Если вы хотите отобразить строку красным цветом, вам нужно пропустить красный и зеленый цвет компонента. Это можно сделать с помощью glPixelTransfer.

например.

glPixelTransferf(GL_RED_SCALE, 1.0f);
glPixelTransferf(GL_GREE_SCALE, 0.0f); 
glPixelTransferf(GL_BLUE_SCALE, 0.0f); 
...