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

我认为,绿灯在左侧部分是什么错误。看起来光线投射在负方向上。您提供的代码片段似乎与照明没有任何关系。你能添加相应的代码吗?你在哪种纹理存储照明信息? – 2012-08-05 23:27:45

+0

昨天解决,发现它被称为反投影(或反向投影)。我只是添加了如果语句检查texCoord.z是否为消除反投影 – user1577566 2012-08-06 09:58:29

+0

您可以添加此作为答案以表明问题已解决。 – 2012-08-06 13:15:17

问题又回来了投影至极被简单地加以解决:

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