【发布时间】:2015-01-24 14:37:17
【问题描述】:
我正在尝试渲染一个带有一些模型的 GUI(如果您了解 Minecraft:我希望拥有与您在库存中看到玩家模型一样的模型)。我试图以正交模式渲染它,但没有出现任何内容。我尝试如下:
glPushMatrix();
glTranslatef(guiX, guiY, 0f);
item.render();
glPopMatrix();
该项目正在调用模型进行渲染。该模型存储在 VBO 中,渲染工作在非正交模式下。我不能在正交模式下渲染 3D 模型吗?
这是我进入正交模式的方式:
public static void enterOrtho() {
glPushAttrib(GL_DEPTH_BUFFER_BIT | GL_ENABLE_BIT);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
// now enter orthographic projection
glLoadIdentity();
glOrtho(0, width, height, 0, -100, 100);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glDisable(GL_DEPTH_TEST);
glDisable(GL_LIGHTING);
}
public static void leaveOrtho() {
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib();
}
我确实尝试不禁用 GL_DEPTH_TEST,但也没有发生任何事情。
【问题讨论】:
-
在绘制正射模型之前不要忘记清除Z-buffer ...
-
这个问题的表述很糟糕。您正在绘制一些具有未知对象坐标和未知变换的未指定对象。不可能找到确切的问题,但很可能您只是在查看体积之外绘制。
-
好吧,自从我开始使用新矩阵以来,我认为我不会在外面画画。 GUI 的坐标也是已知的,用于将 gui 放置在屏幕的中心,所以这是在这里完成的唯一转换。在 item.render 中仅绘制 VBO。我现在也尝试清除深度(或 z)缓冲区,但没有帮助。我添加了一些正交初始化代码。