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