gpt4 book ai didi

c++ - Opengl:2d HUD 超过 3D

转载 作者:IT老高 更新时间:2023-10-28 22:08:12 31 4
gpt4 key购买 nike

我查看了此处发布的一些关于此事的问题,但仍然无法弄清楚为什么我的 2d HUD 出现但让我的 3d 渲染世界消失了。

编辑:似乎 2d 场景正在控制整个屏幕,所以我时不时可以看到 3d 场景在 2d 场景中出现故障。因此,即使我只需要渲染一个 10 x 10 像素的四边形,它也会渲染它然后将屏幕的其余部分空白。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0,(GLdouble)x/(GLdouble)y,0.5,20.0);
glMatrixMode(GL_MODELVIEW);
glViewport(0,0,x,y);
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glTranslatef(0.0,-0.5,-6.0);

glPushMatrix();

..Draw some 3d stuff...

glPopMatrix();
// Start 2d
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, SCREEN_WIDTH, SCREEN_HEIGHT, 0, -1, 1);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor3f(0.0f, 255.0f, 1.0f);
glBegin(GL_QUADS);
glVertex2f(0.0, 0.0);
glVertex2f(10.0, 0.0);
glVertex2f(10.0, 10.0);
glVertex2f(0.0, 10.0);
glEnd();

然后我交换缓冲区

这是我的代码的顺序。就像它创建了 3d 空间然后创建了 2d 空间,这反过来又抵消了 3d 空间。

最佳答案

花了一点时间才弄明白,所以以防万一其他人有同样的问题:

    ...After Drawing 3d Stuff...

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0, SCREEN_WIDTH, SCREEN_HEIGHT, 0.0, -1.0, 10.0);
glMatrixMode(GL_MODELVIEW);
//glPushMatrix(); ----Not sure if I need this
glLoadIdentity();
glDisable(GL_CULL_FACE);

glClear(GL_DEPTH_BUFFER_BIT);

glBegin(GL_QUADS);
glColor3f(1.0f, 0.0f, 0.0);
glVertex2f(0.0, 0.0);
glVertex2f(10.0, 0.0);
glVertex2f(10.0, 10.0);
glVertex2f(0.0, 10.0);
glEnd();

// Making sure we can render 3d again
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
//glPopMatrix(); ----and this?

...Then swap buffers...

:)

关于c++ - Opengl:2d HUD 超过 3D,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5467218/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com