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