opengl-es - 如何读取 WebGL 中的深度缓冲区?

标签 opengl-es webgl depth-buffer

使用 WebGL API,我如何从深度缓冲区中获取值,或者以任何其他方式从屏幕坐标中确定 3D 坐标(即找到单击的位置),而不是通过执行我自己的光线转换?

最佳答案

几年过去了,这些天 WEBGL_depth_texture扩展是广泛可用的......除非你需要支持 IE。

一般用法:

准备:

  • 查询分机(必填)
  • 分配单独的颜色和深度纹理 (gl.DEPTH_COMPONENT)
  • 将两个纹理合并到一个帧缓冲区(gl.COLOR_ATTACHMENT0gl.DEPTH_ATTACHMENT)

  • 渲染:
  • 绑定(bind)帧缓冲,渲染你的场景(通常是简化版)
  • 取消绑定(bind)帧缓冲区,将深度纹理传递给着色器并像读取任何其他纹理一样读取它:
    texPos.xyz = (gl_Position.xyz / gl_Position.w) * 0.5 + 0.5;
    float depthFromZBuffer = texture2D(uTexDepthBuffer, texPos.xy).x;
    
  • 关于opengl-es - 如何读取 WebGL 中的深度缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7327544/

    相关文章:

    java - OpenGL ES2 Alpha 测试问题

    ios - iOS 上 OpenGLES 上的冲突绘图

    android - 使用 SDL 1.3 和 OpenGL ES 1.1 的白色纹理

    javascript - WebGL 不在某些设备上渲染纹理

    javascript - 何时绑定(bind)缓冲区以允许在 WebGL 中独立拖动多个形状存在问题

    XNA 4.0 和(对我来说)无法解决的深度好奇渲染

    java - LIBGDX - 着色器中不需要的纹理混合

    android - 为什么Android找不到android.graphics.OpenGLContext?

    javascript - 尽管在 WebGL 中进行了优化,但帧速率仍然较低

    android - glDepthMask(GL_FALSE) 破坏某些 GPU 上的帧缓冲区