#version 150
uniform float shade;
in vec3 cshade;
in vec3 v_o;
in vec3 locallight_o;
in vec3 n;
in float shadescale_o;
out vec4 pixelcolour;
void main()
{
float shadescale;
shadescale=shadescale_o;
vec3 vn,l,ln,nn,h,hh;
vec3 ambient = vec3(0.4,0.4,0.4); // ambient light
vn=normalize(v_o);
ln=normalize(locallight_o);
if (dot(ln,n)<0)
{
h=vn-ln;//light direction shines from source to object
hh=h;
h=normalize(h);
nn=normalize(n);
shadescale= dot(h,nn);//inward normal
if (shadescale<0)
shadescale=0;
shadescale*=shadescale;
shadescale*=shadescale;
}
else
shadescale=0;
// Get pixel colour from input shade
if (shade>=0.5)
{
pixelcolour = vec4((cshade * shadescale) + (ambient * cshade), 1.0); // ambient lighting
//pixelcolour = vec4((cshade*ambient)+ambient, 1.0);
//pixelcolour += vec4(ambient, 1.0);
}
else
{
pixelcolour = vec4((cshade * shadescale_o) + (ambient * cshade), 1.0);
//pixelcolour = vec4((cshade*ambient)+ambient, 1.0);
//pixelcolour += vec4(ambient, 1.0);
}
}
上述代碼是一種直觀的像素着色器,用於顯示多維數據集的openGL框架。目前環境照明已經實現,但是我怎麼去添加漫反射和鏡面反射(當然不是同時!)到這個代碼?我知道我需要一些額外的制服,即vec3的漫反射和鏡面反射,但我應該執行什麼樣的確切操作?此像素着色器中的漫反射和鏡面反射
偉大的鏈接感謝的是,與方程幫助。我沒有嚴格使用OpenGL,只是簡單地編輯給定的代碼,而不使用可能使生活更輕鬆的GL命令。 –