XNA在两个方向上投影纹理(一个方向相反)

XNA在两个方向上投影纹理(一个方向相反),xna,shader,hlsl,deferred,Xna,Shader,Hlsl,Deferred,我使用以下工具创建了投影仪: 矩阵.CreateLookAt(位置、方向、向量3.向上); Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45),1,1,2) 我将这些矩阵的乘积传递给着色器(在称为视图的着色器中),然后在着色器中执行以下操作: float4 proj(float3 Position) { float4 texCoord = mul(float4(Position, 1.0), View); te

我使用以下工具创建了投影仪:

矩阵.CreateLookAt(位置、方向、向量3.向上); Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45),1,1,2)

我将这些矩阵的乘积传递给着色器(在称为视图的着色器中),然后在着色器中执行以下操作:

float4 proj(float3 Position)
{
    float4 texCoord = mul(float4(Position, 1.0), View);
    texCoord.x = ( (texCoord.x / texCoord.w)/2) + 0.5;
    texCoord.y = (-(texCoord.y / texCoord.w)/2) + 0.5;
    return tex2D(shape, texCoord.xy);
}
纹理的uvw被钳制。我用它在不同明暗处理的灯光阶段。生成的图像(红色箭头是正确的方向):

我应该怎么做才能使它只朝正确的方向发展

已解决: 问题是反投影,简单地解决了:

float4 proj(float3 Position)
{
    float4 texCoord = mul(float4(Position, 1.0), View);
        if(texCoord.z < 0)
            return 0;
    texCoord.x = ( (texCoord.x / texCoord.w)/2) + 0.5;
    texCoord.y = (-(texCoord.y / texCoord.w)/2) + 0.5;
    return tex2D(shape, texCoord.xy);
}
float4 proj(float3 Position)
{
    float4 texCoord = mul(float4(Position, 1.0), View);
        if(texCoord.z < 0)
            return 0;
    texCoord.x = ( (texCoord.x / texCoord.w)/2) + 0.5;
    texCoord.y = (-(texCoord.y / texCoord.w)/2) + 0.5;
    return tex2D(shape, texCoord.xy);
}
float4项目(float3位置)
{
浮动4 texCoord=mul(浮动4(位置,1.0),视图);
if(texCoord.z<0)
返回0;
texCoord.x=((texCoord.x/texCoord.w)/2)+0.5;
texCoord.y=((texCoord.y/texCoord.w)/2)+0.5;
返回tex2D(形状,texCoord.xy);
}

问题在于反投影,它简单地解决了:

float4 proj(float3 Position)
{
    float4 texCoord = mul(float4(Position, 1.0), View);
        if(texCoord.z < 0)
            return 0;
    texCoord.x = ( (texCoord.x / texCoord.w)/2) + 0.5;
    texCoord.y = (-(texCoord.y / texCoord.w)/2) + 0.5;
    return tex2D(shape, texCoord.xy);
}
float4 proj(float3 Position)
{
    float4 texCoord = mul(float4(Position, 1.0), View);
        if(texCoord.z < 0)
            return 0;
    texCoord.x = ( (texCoord.x / texCoord.w)/2) + 0.5;
    texCoord.y = (-(texCoord.y / texCoord.w)/2) + 0.5;
    return tex2D(shape, texCoord.xy);
}
float4项目(float3位置)
{
浮动4 texCoord=mul(浮动4(位置,1.0),视图);
if(texCoord.z<0)
返回0;
texCoord.x=((texCoord.x/texCoord.w)/2)+0.5;
texCoord.y=((texCoord.y/texCoord.w)/2)+0.5;
返回tex2D(形状,texCoord.xy);
}

我想,左边的绿灯就是问题所在。看起来光线是朝负方向投射的。您提供的代码片段似乎与照明无关。你能加上相应的代码吗?你们在哪个纹理中存储照明信息?昨天解决了这个问题,发现它被称为反向投影(或反向投影)。我刚刚添加了if station,用于检查texCoord.z是否为负值,以消除反向投影。您可以添加它作为答案,以表明问题已经解决。