c++ - 显示不在 3D 中的不移动文本(例如显示 HUD 或帧速率)

标签 c++ opengl frame-rate

我想制作一些东西来在屏幕上显示文本。但我想要像 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();
}

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

关于c++ - 显示不在 3D 中的不移动文本(例如显示 HUD 或帧速率),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373436/

相关文章:

c++ - 获取多态对象的大小

iphone - iPhone 上的 FPS 速率上限?

arrays - glVertex3fv 和 glVertex3f 之间的区别

c++ - 做工作而不是等待 glMapBuffer

opencv - 侵 eclipse 的备用功能以减少处理时间

java - Libgdx、物理、加速和 FPS

c++ - 使用表达式模板时,根据左值/右值提供类的不同实现

C++ STL : Including all libraries?

c++ - FFMPEG 4.4 如何在 Windows 上将 NV12 格式转换为 YUV420?

java - OpenGL:单个顶点缓冲区中的两个球体