2010-09-05 30 views
6

Tôi đang chơi với mỗi pixel shaders ánh sáng và tôi không biết một điều: Nửa vector nguồn sáng là gì?Nửa vector ánh sáng trong glsl là gì?

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

Tôi muốn tôi có thể giải thích nó trong hàng toán, tôi hiểu toán học tốt hơn so với lời :)

Trả lời

6

Từ this post:

A "vector nửa chừng" (nếu bạn có nghĩa là bởi "nửa vector") là vector đơn vị ở góc nửa giữa hai vectơ khác. Thông thường các vector nửa [...] được tính giữa các vector để người xem v và nguồn l ánh sáng:

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

Nửa vector do là đơn vị angle bisector của vector View- và ánh sáng.

Edit: Đối với một giải thích đầy đủ các mô hình chiếu sáng bao gồm các vector nửa, chỉ thấy Blinn-Phong wikipedia article

+0

điều này có thực sự chính xác không? nếu v là {0,5} và l là {2,0} thì góc giữa h và v là ~ 21 độ và góc giữa h và l là ~ 69 độ. giả định rằng (v + l) là {2,5} và || v + l || là Sqrt [29] – ColacX

+0

Tôi nghĩ rằng v và l được giả định ở đây. – jgon

2

Các câu trả lời của Dario là đúng, nhưng kể từ khi câu hỏi đã cho GLSL, đây là mã thích hợp :

vec3 hf = normalize(v + l); 

Nói chung, vector nửa "THE" là vector giữa ánh sáng và vectơ xem. Nó thường được sử dụng làm đầu vào cho bit đặc trưng của các phương trình Blinn-Phong.

-2
vec3 halfVector = normalize(lightDirection + viewDirection); 
Các vấn đề liên quan