在我的着色器我已經有一個具有整個內容先前渲染畫面的特殊變量。它存儲在模型到屏幕座標的混亂GLSL着色器
uniform sampler2D _GrabTexture;
它的內容應該是:
(作爲一個方面說明,我使用的是統一的GrabPass {}讓整個屏幕也請忽略Unity的GUI)。
現在我怎樣才能渲染又一次通過,使用_GrabTexture作爲我的平面模型的紋理,所以結果與我的_GrabTexture完全一樣?
(重點是,我可以應用一些效果,如模糊,銳化等該屏幕質感之前呈現一個更合格因此飛機的質地現在程式化。)
我在最後嘗試這種通過。該變量在這兩個頂點&片段着色器聲明。
uniform sampler2D _GrabTexture;
varying vec4 v_Position;
頂點着色器:每個模型的頂點的
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
v_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
商店屏幕座標作爲改變,在片段着色器中使用。
片段着色器:
void main()
{
gl_FragColor = texture2D(_GrabTexture,vec2(v_Position));
}
現在使用存儲不同位置來訪問_GrabTexture屏幕紋理。因爲它是整個屏幕我v_Position這已經是在屏幕座標應該正確地得到了正確的像素。
但結果是
正如你可以看到飛機的質地爲事先渲染的畫面「的種種」,但座標是不正確的。我如何解決這個問題,結果和第一張圖片一樣?
謝謝!你的轉換可以做到這一點,因爲我不支持Unity GLSL中的texelFetch。 (我也知道'gl_FragCoord',但我想知道它是如何滑落我的頭腦的)但缺點是我無法知道着色器代碼中運行時的sampler2D的寬度和高度,所以我必須根據我的屏幕進行設置。 – 5argon
@Sargon:使用均勻傳遞紋理大小作爲附加VEC2。 – datenwolf