2020-07-30 07:03:05 +00:00
## Refract
2020-07-30 09:34:42 +00:00
Tính vector khúc xạ khi tia tới va chạm với một bề mặt.
2020-07-30 07:03:05 +00:00
### Các phiên bản
```glsl
float refract(float I, float N, float eta)
vec2 refract(vec2 I, vec2 N, float eta)
vec3 refract(vec3 I, vec3 N, float eta)
vec4 refract(vec4 I, vec4 N, float eta)
```
### Các tham số
2020-07-30 09:34:42 +00:00
```I``` Vector tới (incident vector), là vector chỉ hướng tia va chạm với bề mặt.
2020-07-30 07:03:05 +00:00
2020-07-30 09:34:42 +00:00
```N``` Vector pháp tuyến của bề mặt tại điểm va chạm, là vector vuông góc với bề mặt.
2020-07-30 07:03:05 +00:00
2020-07-30 09:34:42 +00:00
```eta``` Tỉ lệ chiết suất giữa hai môi trường.
2020-07-30 07:03:05 +00:00
### Mô tả
2020-07-30 09:34:42 +00:00
Cho vector tới ```I```, vector pháp tuyến của bề mặt va chạm ```N``` và , vector khúc xạ chỉ hướng khúc xạ sẽ được tính theo công thức dưới đây và trả về:
2020-07-30 07:03:05 +00:00
```glsl
k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));
if (k < 0.0 )
2020-07-30 09:34:42 +00:00
R = genType(0.0); // hoặc genDType(0.0)
2020-07-30 07:03:05 +00:00
else
R = eta * I - (eta * dot(N, I) + sqrt(k)) * N;
```
2020-07-30 09:34:42 +00:00
```I``` và ```N``` nên được chuẩn hóa (normalize) để có kết quả chính xác nhất.
2020-07-30 07:03:05 +00:00
### Tham khảo thêm
[dot() ](/glossary/?lan=vi&search=dot ), [reflect() ](/glossary/?lan=vi&search=reflect )