XNA在两个方向(一个是相反方向)
问题描述:
我建立与投影机投影纹理:XNA在两个方向(一个是相反方向)
Matrix.CreateLookAt(位置,方向,Vector3.Up); 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被夹住。我使用它在轻度的阴影阶段。产生的图像(红色箭头是正确的方向): image
我应该怎么做才能让它正确朝向?
解决: 问题是背投影至极简单地解决:
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);
}
我认为,绿灯在左侧部分是什么错误。看起来光线投射在负方向上。您提供的代码片段似乎与照明没有任何关系。你能添加相应的代码吗?你在哪种纹理存储照明信息? – 2012-08-05 23:27:45
昨天解决,发现它被称为反投影(或反向投影)。我只是添加了如果语句检查texCoord.z是否为消除反投影 – user1577566 2012-08-06 09:58:29
您可以添加此作为答案以表明问题已解决。 – 2012-08-06 13:15:17