Vật chắn sáng: một hình chắn ánh sáng và đổ bóng. Tiếp...
#include <njin_light.h>
Các thuộc tính Public | |
| std::vector< vec2 > | points |
| Các điểm theo thứ tự. | |
| bool | closed = true |
| Đa giác đóng (đặc, chắn từ phía ngoài vào) hay đường mở (mỏng, chắn cả hai phía). | |
| bool | hole = false |
| Đa giác đóng là một cái lỗ trong khối đặc: bên trong là khoảng trống, vật đặc nằm bên ngoài. | |
| f32 | reach = 0.0f |
| Khoảng xa nhất từ điểm neo đến một điểm của hình, cho engine loại nhanh vật chắn nằm ngoài tầm nhìn mà không phải duyệt các điểm. | |
Vật chắn sáng: một hình chắn ánh sáng và đổ bóng.
Cần transform trên cùng entity; các điểm tính từ transform.pos, xoay và co giãn theo transform, nên vật chắn di chuyển, xoay, co giãn cùng entity. Sửa points mỗi frame cũng được: bóng theo hình mới ngay.
Có ba cách có hình:
Vật chắn đặc không tự che chính nó: điểm nằm trong hình không bị chính hình đó đổ bóng, và đèn nằm trong hình (đuốc trên người nhân vật) không bị hình đó chặn. Đa giác đóng viết theo chiều nào cũng được. Mỗi đèn chỉ xét tối đa 64 cạnh gần nhất trong vùng của nó, nên đừng dùng quá nhiều cạnh cho vật nhỏ.
| std::vector<vec2> njin::light_occluder::points |
Các điểm theo thứ tự.
Đóng vòng lại khi closed. Ít nhất 2.
| bool njin::light_occluder::hole = false |
Đa giác đóng là một cái lỗ trong khối đặc: bên trong là khoảng trống, vật đặc nằm bên ngoài.
Dùng cho vòng trong của một căn phòng có tường dày (vòng ngoài là đặc, vòng trong là lỗ). light_occluders_from_tiles() tự đặt cho các vòng lỗ.
| f32 njin::light_occluder::reach = 0.0f |
Khoảng xa nhất từ điểm neo đến một điểm của hình, cho engine loại nhanh vật chắn nằm ngoài tầm nhìn mà không phải duyệt các điểm.
Các hàm dựng sẵn tự đặt. Để 0 thì engine tự đo mỗi frame (chậm hơn một chút khi có hàng nghìn vật chắn); nếu đặt thì phải đúng hoặc lớn hơn, không thì vật chắn có thể bị bỏ sót khi ở rìa.