首页 > 解决方案 > GLSL 只渲染 Z 位置在制服 minZ 和 maxZ 之间的片段

问题描述

我有一个包含数千个顶点的网格。该模型代表了一个复杂的结构,需要对其整体和部分进行可视化。我的应用程序的用户应该能够定义 Z 轴的最小值和最大值。只应渲染位置在这些限制之间的片段。

我天真的解决方案是编写一个片段着色器,有点像这样:

#extension GL_EXT_texture_array : enable

    uniform sampler2DArray m_ColorMap;
    uniform float m_minZ;
    uniform float m_maxZ;

    in vec4 fragPosition;
    in vec3 texCoord;

void main(){
    if (fragPosition.z < m_minZ || fragPosition.z > m_maxZ) {
        discard;
    }
    gl_FragColor = texture2DArray(m_ColorMap, texCoord);
}

或者,我可以尝试以某种方式过滤掉顶点着色器中的顶点。如果它们超出范围,也许通过将它们的位置值设置为 (0,0,0,0)。

我相当肯定这两种方法都可以工作。但我想知道是否有一些我不知道的更好的方法来做到这一点。某种用于沿轴对模型进行切片的标准方法。

请记住,我不想为每个切片使用单独的 VBO,因为它们可以由用户动态设置。

非常感谢。

标签: glslfragment-shadervertex-shader

解决方案


推荐阅读