2012-08-05 17 views
0

我建立與投影機投影紋理: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

回答

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