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);
}
我認爲,綠燈在左側部分是什麼錯誤。看起來光線投射在負方向上。您提供的代碼片段似乎與照明沒有任何關係。你能添加相應的代碼嗎?你在哪種紋理存儲照明信息? – 2012-08-05 23:27:45
昨天解決,發現它被稱爲反投影(或反向投影)。我只是添加了如果語句檢查texCoord.z是否爲消除反投影 – user1577566 2012-08-06 09:58:29
您可以添加此作爲答案以表明問題已解決。 – 2012-08-06 13:15:17