我已经阅读了一些教程,并试图围绕OpenGL ES 2.0进行思考。在尝试创建深度缓冲区时,我的 JVM 崩溃了。顺便说一句,我正在使用LibGDX框架。
IntBuffer depthBuffer = BufferUtils.newIntBuffer(1);
// AFAIK this puts 1 texture name into depthBuffer.
Gdx.gl20.glGenTextures(1, depthBuffer);
int depthBufferValue = depthBuffer.get();
// I now bind the texture, so I can use it.
Gdx.gl20.glBindTexture(GL20.GL_TEXTURE_2D, depthBufferValue);
我不知道glTexImage2D
是做什么的,我想它应该产生深度纹理。
下一行使 JVM 崩溃
Gdx.gl20.glTexImage2D(GL20.GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, BufferUtils.newIntBuffer(1));
下一行会导致NullPointerException
我不知道我应该把什么作为最后一个参数glTexImage2D
。我看过 iOS 的例子,他们把 NULL
.
Gdx.gl20.glTexImage2D(GL20.GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, null);
代码的其余
部分 // This code should attach the depth texture into frame buffer
IntBuffer depthFrameBuffer = BufferUtils.newIntBuffer(1);
glGenFramebuffers(1, depthFrameBuffer);
int depthFrameBufferValue = depthBuffer.get();
glBindFramebuffer(GL_FRAMEBUFFER, depthFrameBufferValue);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthFrameBufferValue, 0);
// I dont know what should I call next or what type of shader should I use
请指出正确的方向,或者每当我在假设中犯了错误时。
教程是最好的,我在OpenGL ES 2.0中没有找到太多关于阴影贴图的信息
libGDX 中存在一个错误,要求 glTexImage2D
纹理参数为非空(这意味着必须始终上传一些本地纹理数据)。 它已通过以下更改修复:https://github.com/libgdx/libgdx/pull/228。 这将是 0.9.8 之后版本的一部分(很可能是 0.9.9 版本)。