Đèn điểm, đèn nón, đèn hướng, ánh sáng nền, bóng đổ từ vật chắn, normal map, đèn theo vật lý. Tiếp...
Classes | |
| struct | njin::light_2d |
| Một nguồn sáng 2D. Tiếp... | |
| struct | njin::light_occluder |
| Vật chắn sáng: một hình chắn ánh sáng và đổ bóng. Tiếp... | |
| struct | njin::light_occluder_sprite |
| Vật chắn theo hình sprite: viền của các pixel đủ đục trong frame đang hiện của sprite trên cùng entity, nên bóng đúng hình cái cây, con quái, và đổi theo từng frame animation, lật ngang, xoay và co giãn. Tiếp... | |
| struct | njin::light_occluder_pixels |
| Vật chắn từng pixel: những pixel đủ đục của ảnh sprite (hoặc của mask) chắn sáng và đổ bóng đúng từng pixel, không cần dựng hình. Tiếp... | |
| struct | njin::lighting_desc |
| Cài đặt chung của ánh sáng. Đặt bằng lighting_set(). Tiếp... | |
Enumerations | |
| enum | njin::light_kind : i32 { njin::light_point , njin::light_spot , njin::light_directional } |
| Loại đèn. Tiếp... | |
| enum | njin::light_falloff : i32 { njin::falloff_physical , njin::falloff_linear , njin::falloff_smooth , njin::falloff_none } |
| Đường cong tối dần theo khoảng cách của đèn điểm và đèn nón. Tiếp... | |
| enum | njin::light_tonemap : i32 { njin::tonemap_shoulder , njin::tonemap_reinhard , njin::tonemap_aces } |
| Cách nén ánh sáng HDR về màn hình. Đều chạy sau độ phơi sáng (lighting_desc::exposure). Tiếp... | |
Các hàm | |
| light_occluder | njin::light_occluder_box (vec2 size, vec2 origin={0.5f, 0.5f}) |
| Vật chắn hình chữ nhật. | |
| light_occluder | njin::light_occluder_ellipse (vec2 radii, vec2 center={0.0f, 0.0f}, i32 segments=16) |
| Vật chắn hình elip (đa giác đều đủ nhiều cạnh). | |
| light_occluder | njin::light_occluder_circle (f32 radius, vec2 center={0.0f, 0.0f}, i32 segments=16) |
| Vật chắn hình tròn. | |
| light_occluder | njin::light_occluder_capsule (vec2 a, vec2 b, f32 radius, i32 arc_segments=6) |
| Vật chắn hình viên thuốc (capsule): đoạn thẳng từ a đến b phình ra radius. | |
| light_occluder | njin::light_occluder_line (std::vector< vec2 > points) |
| Vật chắn là một đường gấp khúc mỏng, chắn cả hai phía: tường, hàng rào, mép vách. | |
| std::vector< light_occluder > | njin::light_occluders_from_tiles (const tilemap &map, const std::function< bool(i32 tile)> &solid, f32 simplify=0.0f) |
| Viền các ô đặc của một tilemap thành các vật chắn, để tường và vách chặn sáng. | |
| void | njin::lighting_set (context &ctx, const lighting_desc &desc) |
| Đặt cài đặt ánh sáng. | |
| lighting_desc | njin::lighting_get (const context &ctx) |
| Cài đặt ánh sáng đang dùng. | |
| rgba | njin::light_color_kelvin (f32 kelvin) |
| Màu của một vật đen phát sáng ở nhiệt độ cho trước. | |
Đèn điểm, đèn nón, đèn hướng, ánh sáng nền, bóng đổ từ vật chắn, normal map, đèn theo vật lý.
| enum njin::light_kind : i32 |
Loại đèn.
| Enumerator | |
|---|---|
| light_point | Đèn điểm: tỏa đều mọi hướng từ transform.pos, tối dần theo khoảng cách. |
| light_spot | Đèn nón (đèn pin, đèn sân khấu): chỉ sáng trong một góc quanh hướng angle. |
| light_directional | Đèn hướng (mặt trời, trăng): sáng đều cả cảnh, từ một hướng, không có vị trí. |
| enum njin::light_falloff : i32 |
Đường cong tối dần theo khoảng cách của đèn điểm và đèn nón.
| enum njin::light_tonemap : i32 |
Cách nén ánh sáng HDR về màn hình. Đều chạy sau độ phơi sáng (lighting_desc::exposure).
|
inline |
Vật chắn hình chữ nhật.
| size | Kích thước (rộng, cao). |
| origin | Điểm neo tính theo tỉ lệ kích thước, như sprite::origin: {0.5, 1} là giữa đáy, hợp với gốc cây. |
|
inline |
Vật chắn hình elip (đa giác đều đủ nhiều cạnh).
Hình tròn khi hai bán kính bằng nhau.
| radii | Bán kính theo hai trục. |
| center | Tâm, tính từ điểm neo của entity. |
| segments | Số cạnh, từ 3. Nhiều cạnh thì tròn hơn nhưng đèn tốn hơn. |
|
inline |
Vật chắn hình tròn.
| radius | Bán kính. |
| center | Tâm, tính từ điểm neo của entity. |
| segments | Số cạnh, từ 3. |
|
inline |
Vật chắn hình viên thuốc (capsule): đoạn thẳng từ a đến b phình ra radius.
Hợp với người đứng, thân cây, cột: dài mà tròn hai đầu.
| a | Tâm đầu thứ nhất, tính từ điểm neo của entity. |
| b | Tâm đầu thứ hai. |
| radius | Bán kính. |
| arc_segments | Số cạnh mỗi nửa vòng tròn ở hai đầu. |
|
inline |
Vật chắn là một đường gấp khúc mỏng, chắn cả hai phía: tường, hàng rào, mép vách.
| points | Các điểm theo thứ tự, ít nhất 2. |
| std::vector< light_occluder > njin::light_occluders_from_tiles | ( | const tilemap & | map, |
| const std::function< bool(i32 tile)> & | solid, | ||
| f32 | simplify = 0.0f ) |
Viền các ô đặc của một tilemap thành các vật chắn, để tường và vách chặn sáng.
Chỉ những cạnh giữa ô đặc và ô không đặc mới thành viền, và các cạnh thẳng hàng được nối lại, nên một khối tường lớn chỉ có vài cạnh. Kết quả tính từ gốc của tilemap: gắn mỗi vật chắn vào một entity có transform của tilemap. Tính lại khi tilemap đổi (đào tường, mở cửa).
| map | Tilemap. |
| solid | Cho biết ô (số thứ tự trong tileset, không kèm bit lật) có chắn sáng không. |
| simplify | Làm trơn, tính bằng ô; 0 là giữ nguyên. |
| void njin::lighting_set | ( | context & | ctx, |
| const lighting_desc & | desc ) |
Đặt cài đặt ánh sáng.
Đổi mỗi frame được (ví dụ ambient theo giờ trong ngày).
| ctx | Context của engine. |
| desc | Cài đặt mới. |
| lighting_desc njin::lighting_get | ( | const context & | ctx | ) |
Cài đặt ánh sáng đang dùng.
Sửa bản sao rồi lighting_set() lại.
| ctx | Context của engine. |
Màu của một vật đen phát sáng ở nhiệt độ cho trước.
Dùng để đặt light_2d::color hoặc để tô màu ambient (bình minh 3500, trưa 6500, trăng lạnh 9000). Xấp xỉ trong khoảng 1000 đến 40000 kelvin.
| kelvin | Nhiệt độ màu. |