如何在片段着色器中找到 4 个顶点之间的插值位置?

Posted

技术标签:

【中文标题】如何在片段着色器中找到 4 个顶点之间的插值位置?【英文标题】:How can I find the interpolated position between 4 vertices in a fragment shader? 【发布时间】:2013-11-04 16:47:37 【问题描述】:

我正在使用 SharpDX(C# 中的 DirectX11)创建一个着色器,该着色器从 顶点着色器的输出中获取 segment2 个点) em> 然后将它们传递给一个几何着色器,它将这个线条转换成一个矩形4个点)并为四个角分配一个纹理坐标。

之后我想要一个 Fragment Shader(它接收插值位置和插值纹理坐标)检查“矩形的脊椎”处的深度(即,在通过的行中)穿过矩形的中间。

问题是我不知道如何提取矩形脊椎处对应片段的位置。发生这种情况是因为我插入了纹理坐标,但我不知道如何使用它们来获取我想要的片段,因为 a) 纹理的坐标系和 b) 我的片段在屏幕空间中的位置不是一样。

非常感谢您的帮助。

【问题讨论】:

如果您发布着色器的 HLSL 代码,我可能会提供更好的帮助,但如果没有代码,我将无能为力。此外,作为一个挑剔,在 DirectX 中,片段着色器称为像素着色器。 【参考方案1】:

我认为不可能在矩形的脊椎处提取相应片段的位置。但是对于每个片段,你都有插值位置(所有,你需要得到它是将它传输到片段着色器,它将为每个片段进行插值)和纹理坐标。为什么你不能使用它?为什么需要准确地找到片段坐标?

此外,您可以在几何着色器中生成一些额外的数据来做您想做的事情。

【讨论】:

以上是关于如何在片段着色器中找到 4 个顶点之间的插值位置?的主要内容,如果未能解决你的问题,请参考以下文章

片段着色器中的OpenGL点精灵旋转

在片段着色器中输出数据时切换布局位置

在顶点和片段着色器中访问同名统一失败

顶点着色器中属性的位置不正确

GLSL:使用片段着色器进行对象翻译

在顶点着色器中定位顶点后如何更新法线?