2
請考慮以下問題。
你有一個簡單的盒子,裏面顯示的圖像。
你也有兩個紋理,紅色的一個,和綠色的...
您從綠色質地初始化使用texure ...
你的窗口中首先顯示您不變的紋理:
如何在片段着色器中存儲紋理
陰影圓圈圍繞着鼠標顯示紋理的一部分。
當你按下你的鼠標按鈕,下面顯示的陰影區域變爲紅色的質感,
爲:
到目前爲止好。然而,我搜索了不少,但我不能
找到一種方法來存儲從片段着色器的結果
顯示,使用的紋理。總的操作將總結爲形成
第一和第二紋理的混合。
這裏是我的相關片段着色器:
#version 120
uniform sampler2D red_texture, used_texture;
uniform bool isMouseClicked;
uniform float mousex, mousey;
uniform float radius; //the radius of the painting circle
void shadePixel(){ ... }
void main(){
//calculate the distance from mouse origin
float distance = sqrt(pow((gl_FragCoord.x - mousex), 2) + pow((gl_FragCoord.y - mousey), 2));
if(distance<=radius && isMouseClicked){
//used_texture <- red_tuxture
}
if(distance<=radius) shadePixel(); //make circle bound visible
else gl_FragColor = texture2D(used_texture, gl_TexCoord[0].xy);
}
我想以後檢索的紋理RAM和保存到磁盤的圖像。
那麼,有沒有辦法通過片段着色器來操縱紋理?
預先感謝您。
謝謝,但我希望通過着色器來做到這一點。你知道這是否有可能嗎? –
@FrustratedSoul:你可以在新的硬件上使用計算着色器和'imageStore'。但是我沒有理由不像瓦格納所描述的那樣不使用通過渲染到紋理進行混合的硬件。 – ybungalobill
「,但我希望通過着色器做到這一點:」嗯,你使用片段着色器計算你的圖像(或任何你想要計算的)並將其輸出到紋理,我不明白爲什麼你不好用這個解決方案 – Zouch