作爲學習片段着色器/矢量數學的練習,我試圖編寫一個後期處理着色器,基於角度(弧度)爲屏幕上的每個點P着色矢量PC,在P和屏幕C的中心之間。基於角度到屏幕中心的顏色片段GLSL
爲了簡單起見,我將在灰度級上做這件事,但是可以在這裏看到一個很好的例子,我可以看到色調隨角度變化而變化變化和色調形成一個循環。
http://demosthenes.info/assets/images/hsl-color-wheel-trans.png
我已搜索周圍,尋找信息有關查找矢量之間的角度,並從這些例子我已經得到到這裏:
#version 110
uniform sampler2D tex0; //Color info
void main()
{
vec2 ScreenCenter = vec2(0.5 , 0.5);
vec2 texCoord = gl_TexCoord[0].st;
vec2 deltaTexCoord = (texCoord - ScreenCenter.xy);
float angle = dot(deltaTexCoord , vec2(0,-1));
//I've made attempts here to mess with acos as well as angle=pow(angle, somefloat) and
//have not gotten desired results
gl_FragColor = vec4(angle , angle, angle, 1.0);
}
然而這個代碼產生線性梯度而比我想要的效果。
儘管試圖簡化它,色相不是一個數字。色調是一個標準化的3D矢量。飽和度和數值分別是數字,即灰色的角度和距離原點的距離。 – Jessy 2014-09-22 13:59:38