2010-09-05 11 views
6

मैं प्रति पिक्सेल प्रकाश शेडर्स के साथ खेल रहा हूं और मुझे एक चीज़ नहीं पता: प्रकाश स्रोत का आधा वेक्टर क्या है?glsl में प्रकाश का आधा-वेक्टर क्या है?

vec3 halfVector = normalize(gl_LightSource[1].halfVector.xyz); 

मैं मैं चाहते हैं यदि आप गणित पंक्तियों में यह व्याख्या कर सकते हैं, मैं गणित शब्द :)

उत्तर

6

this post से की तुलना में बेहतर ढंग से समझने:

ए 'आधे रास्ते वेक्टर "(यदि आप इसका मतलब यह "आधे वेक्टर" द्वारा) दो अन्य वैक्टरों के बीच आधा कोण पर यूनिट वेक्टर होता है। आम तौर पर आधे रास्ते वेक्टर [...] दर्शक वी करने के लिए वेक्टर और प्रकाश स्रोत एल के बीच गणना की जाती है:

h := (v + l)/|| v + l || 

आधा वेक्टर इसलिए view- और प्रकाश वेक्टर की इकाई angle bisector है।

संपादित करें: आधा वेक्टर सहित प्रकाश मॉडल की एक पूर्ण विवरण के लिए, बस Blinn-Phong wikipedia article

+0

क्या यह वास्तव में सही है? यदि वी {0,5} है और एल {2,0} है तो एच और वी के बीच कोण ~ 21 डिग्री है और एच और एल के बीच कोण ~ 69 डिग्री है। यह मानते हुए कि (v + l) {2,5} और || v + l || है एसकर्ट [2 9] – ColacX

+0

मुझे लगता है कि वी और एल को यहां सामान्यीकृत माना जाता है। – jgon

2

देख दारियो द्वारा जवाब सही है, लेकिन जब से सवाल GLSL के लिए है, उचित कोड है :

vec3 hf = normalize(v + l); 

आम तौर पर "आधा वेक्टर प्रकाश और दृश्य वेक्टर के बीच वेक्टर होता है। यह आमतौर पर ब्लिंन-फोंग समीकरणों के specular बिट में इनपुट के रूप में प्रयोग किया जाता है।

-2
vec3 halfVector = normalize(lightDirection + viewDirection); 
संबंधित मुद्दे