首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么gl_ClipDistance[]不能工作?

为什么gl_ClipDistance[]不能工作?
EN

Stack Overflow用户
提问于 2014-06-21 04:38:15
回答 2查看 4.1K关注 0票数 2

我只是不明白为什么gl_ClipDistance不能工作。结果与我没有设置gl_ClipDistance相同。

我已经通过应用程序设置了glEnable(GL_CLIP_DISTANCE0+2)。

顶点着色器是这样的:

代码语言:javascript
复制
#version 410

uniform mat4    mvpMatrix;
//.......some other uniforms here
in vec2 vVertex;
uniform vec4 clip_plane=vec4(1.0,1.0,0.0,0.85);
uniform vec4 clip_sphere=vec4(0.0,0.0,0.0,10.0);

void main(void) 
    { 
    //........some other code,include vec2 worldPos
    vec4 worldPosition=vec4(worldPos.x,height,worldPos.y,1.0);
    gl_ClipDistance[0]=dot(worldPosition,clip_plane);
    gl_ClipDistance[1]=length(worldPosition.xyz/worldPosition.w-clip_sphere.xyz)-clip_sphere.w;
    gl_Position = mvpMatrix * position;
    }

PS:在好人告诉我之后,我知道“glEnable(GL_CLIP_DISTANCE0+2)”是不对的。所以我设置了"glEnable(GL_CLIP_DISTANCE0) ;glEnable(GL_CLIP_DISTANCE1) ;",但是它仍然没有工作。

然后,我试图只设置"glEnable(GL_CLIP_DISTANCE0)"and"gl_ClipDistance=-1.0“,但让我困惑的是,我的模型仍然停留在那里,没有消失。

有人知道这是怎么发生的吗?

EN

回答 2

Stack Overflow用户

发布于 2014-06-21 04:56:31

我通过应用程序设置了glEnable(GL_CLIP_DISTANCE0+2)

但不是GL_CLIP_DISTANCE0GL_CLIP_DISTANCE1

来自gl_ClipDistance

写入未启用的gl_ClipDistance平面中的值没有任何效果。

如果您打算写入GL_CLIP_DISTANCE0gl_ClipDistance[1],则启用gl_ClipDistance[0]gl_ClipDistance[1]

票数 1
EN

Stack Overflow用户

发布于 2014-06-21 19:34:21

您在这里调用未定义的行为。

GL_CLIP_DISTANCE0 + 2实际上是gl_PerVertex.gl_ClipDistance [...]中的第三个剪辑距离。

名字 gl_ClipDistance -为顶点裁剪描述提供了一种向前兼容的机制。 ..。 无论启用了多少个平面,gl_ClipDistance所消耗的不同组件的数量都将与数组的大小相匹配。gl_ClipDistance 着色器还必须设置通过OpenGL API启用的中的所有值,或者结果是未定义的。写入未启用的gl_ClipDistance平面的值不起任何作用。

由于您已经启用了针对gl_ClipDistance [2]的裁剪,但没有向它写入任何内容,因此每个顶点输出实际上只是2剪辑距离的数组,而第三个是未定义的。对未定义的事物进行剪裁会产生不可预测的行为。

有一项要求,即数组的大小要包括最高启用的剪辑平面。这意味着,如果启用GL_CLIP_DISTANCE2gl_ClipDistance []需要的大小为3。如果使用常量整数表达式对数组进行索引(正如使用和1时所做的那样),GLSL会自动调整数组的大小,但它只将数组调整为2,而不是3

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24338338

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档