奇怪的顶点着色器/ pixelshader毛刺

时间:2009-02-28 18:52:42

标签: c++ directx

我的水效果有点问题

正如您所见here,它没有以正确的方式显示。 应用了不同纹理的另一个screen会更清楚地显示转换中的错误 我的HLSL代码:

V2P vs(float4 inPos : POSITION, float2 inTex: TEXCOORD)
{    
    V2P Output = (V2P)0;

    float4x4 viewproj = mul (matView, matProjection);
    float4x4 worldviewproj = mul (matWorld,viewproj);

    float4x4 reflviewproj = mul (matRLView, matProjection);
    float4x4 reflworldviewproj = mul (matWorld, reflviewproj);

    Output.Position = mul(inPos, worldviewproj);
    Output.RLMapTex = mul(inPos, reflworldviewproj);

    return Output;
}
P2F ps(V2P PSIn)
{
    P2F Output = (P2F)0;        

    float2 ProjectedTexCoords;
    ProjectedTexCoords.x =   PSIn.RLMapTex.x / PSIn.RLMapTex.w /2.0f + 0.5f;
    ProjectedTexCoords.y =  -PSIn.RLMapTex.y / PSIn.RLMapTex.w /2.0f + 0.5f;    

    float2 ProjectedRefCoords;
    ProjectedRefCoords.x = ( PSIn.Position.x / PSIn.Position.w) /2.0f + 0.5f;
    ProjectedRefCoords.y = (-PSIn.Position.y / PSIn.Position.w) /2.0f + 0.5f; 

    Output.Color = tex2D(samRLMap, ProjectedTexCoords);    

    return Output;
}

反射贴图在渲染目标上渲染,同时沿水深翻转眼睛的y值。 (以及向上向量0,-1,0)

所以,我的问题:这可能是什么?

3 个答案:

答案 0 :(得分:1)

我想我发现它,我用于反射视图的矩阵是错误的。 当我使用标准视图时,它工作正常

答案 1 :(得分:0)

我不清楚你为什么要换x。是不是和y翻转一样?如在

    float2 ProjectedTexCoords;
    ProjectedTexCoords.x =   PSIn.RLMapTex.x / PSIn.RLMapTex.w;
    ProjectedTexCoords.y =  -PSIn.RLMapTex.y / PSIn.RLMapTex.w /2.0f + 0.5f;

答案 2 :(得分:0)

看起来像是重复边缘像素的纹理。换句话说,您可能正在进行纹理边界之外的纹理查找。你确定你的反射贴图够大吗?

如果纹理坐标超出范围,可能尝试将输出颜色设置为红色? (我不会说HLSL所以我不知道这个的语法,但我确信它是可能的。)

或放大反射贴图?

即使您可以看到完整的源代码,这些类型的问题也很难调试,所以这更像是一个建议在哪里查看,而不是一个真正的答案。我尝试进行通灵调试。