Graphics hlsl无极化行为
对于一个实验,我想将三角形的所有边传递给像素着色器,并使用三角形边和BayrCenter坐标手动计算像素位置。 为此,我编写了一个几何体着色器,将三角形的所有边传递给像素着色器:Graphics hlsl无极化行为,graphics,directx,hlsl,Graphics,Directx,Hlsl,对于一个实验,我想将三角形的所有边传递给像素着色器,并使用三角形边和BayrCenter坐标手动计算像素位置。 为此,我编写了一个几何体着色器,将三角形的所有边传递给像素着色器: struct GeoIn { float4 projPos : SV_POSITION; float3 position : POSITION; }; struct GeoOut { float4 projPos : SV_POSITION; float3 position : POS
struct GeoIn
{
float4 projPos : SV_POSITION;
float3 position : POSITION;
};
struct GeoOut
{
float4 projPos : SV_POSITION;
float3 position : POSITION;
float3 p[3] : TRIPOS;
};
[maxvertexcount(3)]
void main(triangle GeoIn i[3], inout TriangleStream<GeoOut> OutputStream)
{
GeoOut o;
// add triangle data
for(uint idx = 0; idx < 3; ++idx)
{
o.p[idx] = i[idx].position;
}
// generate verices
for(idx = 0; idx < 3; ++idx)
{
o.projPos = i[idx].projPos;
o.position = i[idx].position;
OutputStream.Append(o);
}
OutputStream.RestartStrip();
}
我得到了以下(预期)结果:
但是,当我通过向p[3]
添加nointerpolation
来修改我的PixelIn
结构时:
struct PixelIn
{
...
nointerpolation float3 p[3] : TRIPOS;
};
我得到:
我没有期望得到不同的结果,因为我没有更改几何体着色器中单个三角形的p[]
值。我尝试通过将输出更改为float4(abs(I.p[0]),1.0)来调试它代码>带和不带插值。没有nointerpolation
时,p[]
的值不会在三角形内变化(这很有意义,因为所有的值都应该相同)。使用nointerpolation
时,p[]
的值确实略有变化。为什么会这样?我认为,nointerpolate
不应该插入任何内容
编辑:
这是几何体的线框:
您可以共享输入的线框视图吗?我添加了线框您可以共享输入的线框视图吗?我添加了线框
struct PixelIn
{
...
nointerpolation float3 p[3] : TRIPOS;
};