Java OpenGL:zbuffer中的对象顺序(LWJGL 3和GLFW 3)
我回到了传统的深度测试问题;我尝试了很多东西,谷歌搜索到了不可搜索的,但仍然没有找到解决办法 我使用Java和LWJGL 3和GLFW渲染一些对象,立方体渲染时启用z缓冲区,我认为:Java OpenGL:zbuffer中的对象顺序(LWJGL 3和GLFW 3),java,opengl,lwjgl,Java,Opengl,Lwjgl,我回到了传统的深度测试问题;我尝试了很多东西,谷歌搜索到了不可搜索的,但仍然没有找到解决办法 我使用Java和LWJGL 3和GLFW渲染一些对象,立方体渲染时启用z缓冲区,我认为: // renderer setup @Override public void setup() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClea
// renderer setup
@Override
public void setup() {
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearDepth(1.0f);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glShadeModel(GL_SMOOTH);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
glEnable(GL_TEXTURE_2D);
// cull face? Maybe? .... dunno
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
// here, hey, OpenGL, do you see this thing!?
glEnable(GL_DEPTH_TEST);
glDepthMask(true);
glDepthFunc(GL_LEQUAL);
glFrontFace(GL_CW);
glDisable(GL_DITHER);
}
但如果我使用VBOs渲染立方体,它们会相互过度渲染
// window creation
if(glfwInit() != GL_TRUE) {
throw new DeRiveanException("Cannot init GLWF subsystem.");
}
glfwDefaultWindowHints();
glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
long monitorHandle = glfwGetPrimaryMonitor();
ByteBuffer videModeBuffer = glfwGetVideoMode(monitorHandle);
setWidth(GLFWvidmode.width(videModeBuffer) * 3 / 4);
setHeight(GLFWvidmode.height(videModeBuffer) * 3 / 4);
if((windowHandle = glfwCreateWindow(getWidth(), getHeight(), "title goes here", 0, 0)) == 0) {
throw new DeRiveanException("Cannot create window handle. Da fucQ!?");
}
glfwSetInputMode(windowHandle, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
glfwSetWindowPos(windowHandle, (GLFWvidmode.width(videModeBuffer) - getWidth()) / 2, (GLFWvidmode.height(videModeBuffer) - getHeight()) / 2);
glfwMakeContextCurrent(windowHandle);
glfwSwapInterval(GL_FALSE);
glfwSetInputMode(windowHandle, GLFW_STICKY_KEYS, GL_TRUE);
glfwSetCursorPos(windowHandle, getWidth() / 2, getHeight() / 2);
GLContext.createFromCurrent();
编辑
好的,现在我知道了,我有深度24位缓冲区,所以bug在另一个地方:
部分明白了
…我已经将引擎尽可能地缩小,并发现,在连接摄像头之前,一切都正常。这很奇怪,但如果我能走路环顾四周,z缓冲区就会消失;如果我设置了静态视图,z-buffer将愉快地生存到它的结束 检查视频模式是否包含深度缓冲区。glfwWindowHintGLFW_深度_位,32;这是默认选项,我尝试了glfwWindowHintGLFW_深度_位,24;和glfwWindowHintGLFW_深度_位,32;都在glfwCreateWindow之前,并且都具有与图像中相同的结果。。。。是否有选项检查我是否有可用的深度缓冲区?如果您使用的是OpenGL 3.0或更早版本,或兼容配置文件,则可以在创建上下文后从OpenGL查询GL_深度_位的值。在较新的版本中被删除。另外,32位深度缓冲区最好留给FBO,一些平台在默认帧缓冲区上不支持它们。