【发布时间】:2012-11-28 22:58:36
【问题描述】:
我有这个代码:https://github.com/magicgoose/lwjgl-nifty-test-project
当我只渲染 GUI 时,它会像预期的那样工作。当我尝试渲染三角形(在透视投影中)然后渲染 GUI 时,一切都失败了,甚至 GUI 也无法正确渲染——我只得到黑色背景上的字母。 (如果我取消注释就会发生这种情况
draw_something() 方法中的draw_something() 语句)
private def draw_something() {
glTranslatef(0, 0, -20)
glBegin(GL_TRIANGLES)
glVertex3f(0.0f, 1.0f, 0.0f)
glVertex3f(-1.0f, -1.0f, 0.0f)
glVertex3f(1.0f, -1.0f, 0.0f)
glEnd()
}
我做错了什么? 我尝试在背景上搜索带有漂亮 gui 和 3d 图形的工作示例,但没有运气。
更新 1
我已经根据 datenwolf 的回答更改了代码,现在 GUI 渲染正常,但我只能在几毫秒内看到白色三角形(实际上它可能在一个帧中?),似乎 3d 设置正在“损坏”...仅当我渲染 GUI 时才会发生这种情况,如果我注释行 gui.render(false),白色三角形会留在屏幕上。
更新 2
我为 3d 部分添加了一些动作(请参阅存储库中的更新),现在我可以看到三角形几乎不可见(看起来像 z 战斗)。
【问题讨论】:
-
你在显示函数开头的glClear调用中添加了GL_DEPTH_BUFFER_BIT吗?
-
因为我不知道 NiftyGUI 在哪个 z 级别上绘制了它的东西:您是否尝试使用
glOrtho而不是gluOrtho2D并为 near 和 fast 参数使用不同的值(最后两个)?gluOrtho2D相当于调用glOrtho,近 = 0 远 = 1。 -
@bluenote10 现在试试这个。似乎它只影响 Nifty GUI 本身:如果它的 z 级别超出范围,它不会绘制,但是如果我尝试在 @987654333 中调用
gui.render(false),三角形会被任何zNear和zFar值损坏@。这似乎是合乎逻辑的,因为display_ready2d(...)中有glDisable(GL_DEPTH_TEST)。顺便说一句,测试表明 NiftyGUI 在 z=0 处绘制。 (或接近于零)
标签: scala opengl 3d lwjgl nifty-gui