非3D显示不移动的文本(例如显示HUD或帧速率)

Displaying not moving text not in 3D (eg. displaying HUD or frame rate)

本文关键字:显示 HUD 帧速率 文本 3D 移动      更新时间:2023-10-16

我想制作一些东西在屏幕上显示文本。但我想要像FPS显示器一样的东西——无论你们在哪里,文本都在同一个地方(比如在角落里),并且有相同的高度。类似于绘制HUD。

我想看看代码。

这种事情通常是这样做的:

void render_frame()
{   
    glViewport(0, 0, win_width, win_height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    set_perspective_projection(); // glFrustum, gluPerspective, etc.
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
    render_scene();
    glViewport(0, 0, lower_left_HUD_width, lower_left_HUD_height);
    glEnable(GL_SCISSOR_TEST);
    glScissor(0, 0, lower_left_HUD_width, lower_left_HUD_height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 1, 0, 1, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClear(GL_DEPTH_BUFFER_BIT);
    render_lower_left_HUD();
    glViewport(win_width - upper_right_HUD_width, win_height - upper_right_HUD_height, upper_right_HUD_width, upper_right_HUD_height);
    glEnable(GL_SCISSOR_TEST);
    glScissor(win_width - upper_right_HUD_width, win_height - upper_right_HUD_height, upper_right_HUD_width, upper_right_HUD_height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, 1, 0, 1, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClear(GL_DEPTH_BUFFER_BIT);
    render_upper_right_HUD();
    SwapBuffers();
}

只是给你一个大概的想法。您可以根据需要扩展此概念,放置迷你视图而不是HUD或类似视图。