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



我用创建了投影仪

Matrix。CreateLookAt(位置,方向,Vector3.Up);Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45),1,1,2);

我将这些矩阵的乘积传递给着色器(在名为View的着色器中),然后在着色器中执行:

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是Clamped。我把它用在遮光的光照阶段。生成的图像(红色箭头是正确的方向):图像

我该怎么做才能让它只朝着正确的方向发展?

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

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);
}

最新更新