如何模拟GL_DEPTH_CLAMP_NV?

发布于 2024-11-06 01:40:05 字数 84 浏览 1 评论 0原文

我有一个平台,此扩展不可用(非 NVIDIA)。 我怎样才能模拟这个功能? 我需要它来解决使用 z-fail 算法渲染模板阴影体积时的远平面裁剪问题。

I have a platform where this extension is not available ( non NVIDIA ).
How could I emulate this functionality ?
I need it to solve far plane clipping problem when rendering stencil shadow volumes with z-fail algorithm.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧时光的容颜 2024-11-13 01:40:05

既然你说你正在使用 OpenGL ES,而且还提到尝试限制 gl_FragDepth,我假设你正在使用 OpenGL ES 2.0,所以这里有一个着色器技巧:

你可以通过对 z 分量使用单独的变量来模拟 ARB_depth_clamp 。

顶点着色器:

varying float z;
void main()
{
    gl_Position = ftransform();

    // transform z to window coordinates
    z = gl_Position.z / gl_Position.w;
    z = (gl_DepthRange.diff * z + gl_DepthRange.near + gl_DepthRange.far) * 0.5;

    // prevent z-clipping
    gl_Position.z = 0.0;
}

片段着色器:

varying float z;
void main()
{
    gl_FragColor = vec4(vec3(z), 1.0);
    gl_FragDepth = clamp(z, 0.0, 1.0);
}

Since you say you're using OpenGL ES, but also mentioned trying to clamp gl_FragDepth, I'm assuming you're using OpenGL ES 2.0, so here's a shader trick:

You can emulate ARB_depth_clamp by using a separate varying for the z-component.

Vertex Shader:

varying float z;
void main()
{
    gl_Position = ftransform();

    // transform z to window coordinates
    z = gl_Position.z / gl_Position.w;
    z = (gl_DepthRange.diff * z + gl_DepthRange.near + gl_DepthRange.far) * 0.5;

    // prevent z-clipping
    gl_Position.z = 0.0;
}

Fragment shader:

varying float z;
void main()
{
    gl_FragColor = vec4(vec3(z), 1.0);
    gl_FragDepth = clamp(z, 0.0, 1.0);
}
回忆躺在深渊里 2024-11-13 01:40:05

“回退”到 ARB_depth_clamp

检查 NV_depth_clamp 是否存在?例如,我的 ATI 卡支持五个“仅 NVidia”GL 扩展。

"Fall back" to ARB_depth_clamp?

Check if NV_depth_clamp exists anyway? For example my ATI card supports five "NVidia-only" GL extensions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文