gpt4 book ai didi

OpenGL 启用剪辑距离

转载 作者:行者123 更新时间:2023-12-02 17:17:03 25 4
gpt4 key购买 nike

我试图在我的 OpenGL 项目中渲染适当的折射/反射,我需要使用裁剪距离。我正在按照 Thin Matrix 的教程进行操作.

我启用剪辑距离

glEnable(GL_CLIP_DISTANCE0);

在我的游戏循环中,然后我尝试像这样在顶点着色器中使用它

gl_ClipDistance[0] = -1;

我试图改变 -1 值,但无论我做什么都没有任何反应。我还需要做些什么才能正确启用它吗?

最佳答案

gl_ClipDistance 数组包含一系列浮点值,表示每个顶点位于概念“平面”的哪一侧。每个数组索引都是一个概念上的“平面”。顶点可以在负边,也可以在非负边。

如果同一直线/三角形的两个顶点在平面的两个不同边上(即一个顶点具有负值,另一个顶点为非负值),则图元将在该位置被裁剪该距离为 0。图元在非负侧的部分将可见。

鉴于此,您需要做的是设置一个裁剪距离值,该值表示顶点位置与要裁剪的平面之间的距离。标准平面方程 (Ax + By + Cz + D = 0) 为我们提供了一种处理此问题的方法。假设向量 (A, B, C) 是单位向量,点到平面 A、B、C、D 的距离很简单:

dot(point, vec3(A, B, C)) + D

这还假设 point 与 A、B、C 和 D 在同一空间中。

当然,如果point是一个vec4,最后一个组件为1.0,那么你可以这样做:

dot(point, plane);

plane 是一个包含 A、B、C 和 D 的 vec4。这就是你的剪辑距离。

您还需要在使用它的着色器阶段使用明确的大小重新声明 gl_ClipDistance。在 GLSL 3.20+ 中,gl_ClipDistance 位于接口(interface) block 中,因此您必须重新声明:

out gl_PerVertex
{
vec4 gl_Position;
float gl_ClipDistance[1];
};

关于OpenGL 启用剪辑距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45650325/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com