opengl - GLSL gl_FragCoord.z 计算和设置 gl_FragDepth

标签 opengl glsl shader

所以,我有一个冒名顶替者(真正的几何体是一个立方体,可能被剪掉了,冒名顶替者的几何体是一个 Menger 海绵),我需要计算它的深度。

我可以很容易地计算在世界空间中的偏移量。不幸的是,我花了好几个小时都没能用它来扰乱深度。

我能得到的唯一正确结果是我去的时候:

gl_FragDepth = gl_FragCoord.z

基本上,我需要知道 gl_FragCoord.z 是如何计算的,以便我可以:
  • 取从 gl_FragCoord.z 到眼睛空间的逆变换
  • 添加深度扰动
  • 将此扰动的深度转换回与原始 gl_FragCoord.z 相同的空间。

  • 如果这似乎是一个重复的问题,我深表歉意;这里还有许多其他帖子解决了类似的问题。但是,在实现所有这些之后,没有一个可以正常工作。在这一点上,我不是试图选择一个来获得帮助,而是要求提供完整的代码。它应该只是几行。

    最佳答案

    供以后引用,关键代码是:

    float far=gl_DepthRange.far; float near=gl_DepthRange.near;
    
    vec4 eye_space_pos = gl_ModelViewMatrix * /*something*/
    vec4 clip_space_pos = gl_ProjectionMatrix * eye_space_pos;
    
    float ndc_depth = clip_space_pos.z / clip_space_pos.w;
    
    float depth = (((far-near) * ndc_depth) + near + far) / 2.0;
    gl_FragDepth = depth;
    

    关于opengl - GLSL gl_FragCoord.z 计算和设置 gl_FragDepth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10264949/

    相关文章:

    c++ - 找不到任何 GLU 文档

    c++ - Qt QPainter在paintEvent中消除用paintGL绘制的图形

    Java渲染LWJGL 3.0.0

    c++ - Opengl C++ : texture code textures all models with the same texture

    glsl - 插入几何着色器中的常数限制?

    多边形太少的 OpenGL 扭曲效果

    尝试 glUseProgram 时出现 Opengl 错误 1281

    opengl - 片段着色器 GLSL 中的颜色插值?

    performance - 如何在没有 ("<<"的情况下执行位移位 || ">>") 运营商有效吗?

    three.js - three.js ShaderLib 中有哪些着色器?