我用创建了投影仪
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);
}