0

我创建了投影仪:

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

1 回答 1

0

问题是反投影,这很容易解决:

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);
}
于 2012-08-06T18:05:51.790 回答