glsl में दो मानकों के बीच कोण की गणना कैसे करते हैं? मैं किसी ऑब्जेक्ट के बाहरी किनारों (फ़ोंग छायांकन के साथ उस प्रभाव को जोड़कर) में फ़्रेज़नेल प्रभाव जोड़ने की कोशिश कर रहा हूं, और मुझे लगता है कि कोण केवल एक चीज है जिसे मैं याद कर रहा हूं।glsl में दो मानकों के बीच कोण की गणना कैसे करते हैं?
टुकड़ा shader:
varying vec3 N;
varying vec3 v;
void main(void) {
v = vec3(gl_ModelViewMatrix * gl_Vertex);
N = normalize(gl_NormalMatrix * gl_Normal);
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
शीर्ष shader:
varying vec3 N;
varying vec3 v;
void main(void) {
vec3 L = normalize(gl_LightSource[0].position.xyz - v);
vec3 E = normalize(-v);
vec3 R = normalize(-reflect(L,N));
vec4 Iamb = gl_FrontLightProduct[0].ambient
vec4 Idiff = gl_FrontLightProduct[0].diffuse * max(dot(N,L), 0.0);
vec4 Ispec = gl_FrontLightProduct[0].specular * pow(max(dot(R,E),0.0), gl_FrontMaterial.shininess);
vec4 Itot = gl_FrontLightModelProduct.sceneColor + Iamb + Idiff + Ispec;
vec3 A = //calculate the angle between the lighting direction and the normal//
float F = 0.33 + 0.67*(1-cos(A))*(1-cos(A))*(1-cos(A))*(1-cos(A))*(1-cos(A));
vec4 white = {1.0, 1.0, 1.0, 1.0};
gl_FragColor = F*white + (1.0-F)*Itot;
}
vec3
glsl में अंतर्निहित डॉट उत्पाद ऑपरेटर भी है। कोड की रेखा खूबसूरती से सरल होगी: सीए = डॉट (v1, v2); इसके बाद, सभी कॉस (ए) संदर्भ सीए के साथ प्रतिस्थापित किए जा सकते हैं। –