【问题标题】:OpenGL ES 2.0 - Rendering depth bufferOpenGL ES 2.0 - 渲染深度缓冲区
【发布时间】:2013-01-30 08:12:14
【问题描述】:

我已经阅读了一些教程并试图围绕 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 中阴影贴图的信息

【问题讨论】:

  • 呃,其实我不知道this能不能帮到你……
  • 太好了。我还没有找到这个。
  • Google for man glTexImage2D 第一个点击是:opengl.org/sdk/docs/man/xhtml/glTexImage2D.xml 它解释了最后一个参数的用途——图像数据(在你的情况下还有很多)。 (man 是 Unix/Linux 手册页命令。)
  • 好吧,我查看了手册,我只是不明白他们为什么要将最后一个参数指定为 NULL 并且不传递任何数据 here。另外,我不知道 android/libgdx 中的等价物是什么?
  • 啊,看来你是对的。但是,看起来这是一个已知问题并已修复(在 2011 年?):code.google.com/p/libgdx/issues/detail?id=538 作为解决方法,请尝试创建一个用于保存纹理(宽度*高度)的 int 缓冲区。除了浪费空间,应该是无害的吧?

标签: java opengl-es opengl-es-2.0 libgdx shadow-mapping


【解决方案1】:

libGDX 中有一个错误,要求 glTexImage2D 纹理参数不为空(这意味着必须始终上传一些本地纹理数据)。此更改已修复:https://github.com/libgdx/libgdx/pull/228。这将是 0.9.8 之后版本的一部分(很可能是 0.9.9 版本)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多