C++ 怪异的顶点着色器/像素着色器故障

C++ 怪异的顶点着色器/像素着色器故障,c++,directx,C++,Directx,我的水效有点问题 正如你所看到的,它并没有以正确的方式出现。 另一个应用了不同纹理的图像更清楚地显示了变换中的错误 我的HLSL代码: V2P vs(float4 inPos : POSITION, float2 inTex: TEXCOORD) { V2P Output = (V2P)0; float4x4 viewproj = mul (matView, matProjection); float4x4 worldviewproj = mul (matWor

我的水效有点问题

正如你所看到的,它并没有以正确的方式出现。 另一个应用了不同纹理的图像更清楚地显示了变换中的错误 我的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时)


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

我不清楚为什么要改变x。它不是和y翻转时一样吗?如

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

我不清楚你为什么要改变x。它不是和y翻转时一样吗?如

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

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

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

或者放大反射图


即使可以看到完整的源代码,这些问题也很难调试,因此这更多是一个建议,而不是实际的答案。我试图进行心理调试。

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

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

或者放大反射图


即使可以看到完整的源代码,这些问题也很难调试,因此这更多是一个建议,而不是实际的答案。我试图进行心理调试。

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

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

标记区域是水的一部分吗?将它与它右边的水线相比较,它实际上似乎在水面之上。你也可以垂直地看到这个人工制品(窗口的左边缘)。标记的区域是水的一部分吗?把它和它右边的水地平线相比,它实际上似乎在水面之上。你也可以垂直地看到这个人造物(窗口的左边缘)。这是因为我正在将它从任何空间转换到屏幕空间。。如果我使用包含整个场景的纹理,屏幕两侧会出现相同的效果=\n这是因为我正在将其从调用的任何空间转换为屏幕空间。。如果我使用包含整个场景的纹理,屏幕两侧也会出现相同的效果=\n如果我使用不同的纹理,我可以看到RLMapTex.w的除法有问题,比如如果离相机更远,w太大。。。反射贴图与场景大小相同,如果我绘制整个纹理,效果会很好,但这样我就不能使用任何凹凸贴图如果我使用不同的纹理,我可以看到被RLMapTex分割的部分有问题。w,就像如果你离相机更远,w太大了。。。反射贴图与场景大小相同,如果我绘制整个纹理,效果很好,但这样我就不能使用任何凹凸贴图