Địa hình có va chạm và sửa được lúc chạy, cỏ, vật rải, nước có sóng và vật nổi, bầu trời theo giờ, thời tiết. Tiếp...
Classes | |
| struct | njin::terrain3d_layer |
| Một lớp bề mặt của địa hình: ảnh lặp lại trên mặt đất, và quy tắc nó phủ chỗ nào khi njin::terrain3d_desc bật auto_splat. Tiếp... | |
| struct | njin::terrain3d_desc |
| Cách dựng một địa hình bằng terrain3d_create(). Tiếp... | |
| struct | njin::terrain3d_brush |
| Một nét sửa địa hình hình tròn, mạnh nhất ở tâm và nhạt dần ra mép. Tiếp... | |
| struct | njin::grass3d_desc |
| Cách mọc của một thảm cỏ trên địa hình (grass3d_create()). Tiếp... | |
| struct | njin::scatter3d_desc |
| Cách rải một loại vật (đá, cây, bụi) lên địa hình (scatter3d_create()). Tiếp... | |
| struct | njin::water3d_wave |
| Một con sóng Gerstner: đỉnh nhọn, đáy bẹt, nước chuyển động theo vòng tròn như sóng thật. Tiếp... | |
| struct | njin::water3d_desc |
| Cách dựng một mặt nước (water3d_create()). Tiếp... | |
| struct | njin::buoyancy3d |
| Cách một body nổi trên nước (water3d_float()). Tiếp... | |
| struct | njin::weather3d |
| Thời tiết: mây, sương, mưa, tuyết, gió, mặt đất ướt. Đặt vào njin::sky3d. Tiếp... | |
| struct | njin::weather3d_cover |
| Một chỗ có mái, cho weather3d_cover_set(): hình hộp thẳng trục. Tiếp... | |
| struct | njin::sky3d |
| Bầu trời theo giờ trong ngày, dùng với draw_sky3d(). Tiếp... | |
Enumerations | |
| enum | njin::terrain3d_brush_kind { njin::terrain3d_raise , njin::terrain3d_lower , njin::terrain3d_flatten , njin::terrain3d_smooth } |
| Kiểu sửa của njin::terrain3d_brush. Tiếp... | |
| enum | njin::weather3d_kind { njin::weather3d_clear , njin::weather3d_overcast , njin::weather3d_rain , njin::weather3d_snow , njin::weather3d_fog } |
| Các kiểu thời tiết có sẵn cho weather3d_preset(). Tiếp... | |
Các hàm | |
| terrain3d_handle | njin::terrain3d_create (context &ctx, const terrain3d_desc &desc) |
| Tạo địa hình. | |
| void | njin::terrain3d_destroy (context &ctx, terrain3d_handle handle) |
| Hủy địa hình cùng body va chạm của nó. | |
| void | njin::draw_terrain3d (const context &ctx, terrain3d_handle handle) |
| Vẽ địa hình trong lần vẽ 3D đang mở (giữa begin_3d() và end_3d()). | |
| f32 | njin::terrain3d_height (const context &ctx, terrain3d_handle handle, f32 x, f32 z) |
| Độ cao mặt đất tại (x, z), đúng như lưới vẽ ở mức chi tiết cao nhất và như body va chạm (cùng cách chia ô thành tam giác). | |
| vec3 | njin::terrain3d_normal (const context &ctx, terrain3d_handle handle, f32 x, f32 z) |
| Pháp tuyến mặt đất tại (x, z) (độ dài 1, hướng lên). | |
| bool | njin::terrain3d_contains (const context &ctx, terrain3d_handle handle, f32 x, f32 z) |
| (x, z) có nằm trên địa hình không. | |
| f32 | njin::terrain3d_layer_weight (const context &ctx, terrain3d_handle handle, f32 x, f32 z, i32 layer) |
| Trọng số của lớp layer tại (x, z), 0 đến 1 (các lớp cộng lại bằng 1). | |
| body3d_handle | njin::terrain3d_body (const context &ctx, terrain3d_handle handle) |
| Body va chạm của địa hình (tĩnh), để nhận ra nó trong raycast và va chạm. | |
| void | njin::terrain3d_edit (context &ctx, terrain3d_handle handle, const terrain3d_brush &brush) |
| Sửa độ cao địa hình bằng một nét: lưới vẽ, body va chạm, lớp tự phủ, cỏ và vật rải trên vùng đó đều theo ngay (vật rải giữ chỗ, chỉ đổi độ cao). | |
| void | njin::terrain3d_paint (context &ctx, terrain3d_handle handle, vec3 center, f32 radius, i32 layer, f32 strength) |
| Vẽ thêm lớp layer lên địa hình quanh center (lớp khác nhạt đi). | |
| grass3d_handle | njin::grass3d_create (context &ctx, const grass3d_desc &desc) |
| Tạo thảm cỏ. | |
| void | njin::grass3d_destroy (context &ctx, grass3d_handle handle) |
| Hủy thảm cỏ. | |
| void | njin::draw_grass3d (const context &ctx, grass3d_handle handle) |
| Vẽ cỏ quanh camera của lần vẽ 3D đang mở. | |
| i32 | njin::grass3d_drawn (const context &ctx, grass3d_handle handle) |
| Số ngọn cỏ vẽ ở lần vẽ 3D gần nhất, để đo. | |
| void | njin::wind3d_set (context &ctx, vec2 wind) |
| Đặt gió cho cỏ, mây và mưa: vận tốc trên mặt xz, mét mỗi giây. | |
| vec2 | njin::wind3d_get (const context &ctx) |
| Gió đang dùng. | |
| scatter3d_handle | njin::scatter3d_create (context &ctx, const scatter3d_desc &desc) |
| Rải vật lên địa hình. | |
| void | njin::scatter3d_destroy (context &ctx, scatter3d_handle handle) |
| Hủy lớp vật rải. | |
| void | njin::draw_scatter3d (const context &ctx, scatter3d_handle handle) |
| Vẽ các vật rải trong tầm nhìn của lần vẽ 3D đang mở (bằng draw_instanced3d()). | |
| i32 | njin::scatter3d_count (const context &ctx, scatter3d_handle handle) |
| Số vật đã rải. | |
| i32 | njin::scatter3d_transforms (const context &ctx, scatter3d_handle handle, transform3d *out, i32 count) |
| Vị trí, hướng và tỉ lệ của các vật đã rải, để game thêm va chạm (body3d_create()) cho cây hay đá to. | |
| water3d_handle | njin::water3d_create (context &ctx, const water3d_desc &desc) |
| Tạo mặt nước. | |
| void | njin::water3d_destroy (context &ctx, water3d_handle handle) |
| Hủy mặt nước. | |
| void | njin::water3d_set (context &ctx, water3d_handle handle, const water3d_desc &desc) |
| Đổi cách dựng của mặt nước (sóng to lên khi bão, mực nước dâng). | |
| water3d_desc | njin::water3d_get (const context &ctx, water3d_handle handle) |
| Cách dựng hiện tại. | |
| void | njin::draw_water3d (const context &ctx, water3d_handle handle) |
| Vẽ mặt nước trong lần vẽ 3D đang mở. | |
| f32 | njin::water3d_height (const context &ctx, water3d_handle handle, f32 x, f32 z) |
| Độ cao mặt nước tại (x, z) vào lúc này, theo đúng công thức sóng của shader. | |
| vec3 | njin::water3d_normal (const context &ctx, water3d_handle handle, f32 x, f32 z) |
| Pháp tuyến mặt nước tại (x, z) vào lúc này. | |
| f32 | njin::water3d_time (const context &ctx) |
| Đồng hồ của sóng, giây: chạy theo delta(), nên dừng khi game tạm dừng. | |
| void | njin::water3d_float (context &ctx, water3d_handle water, body3d_handle body, const buoyancy3d &buoyancy={}) |
| Cho body động nổi trên mặt nước: mỗi bước vật lý, phần thể tích dưới mặt sóng (tại tâm của body) đẩy nó lên, và nước cản nó lại, nên thùng gỗ dập dềnh theo sóng. | |
| void | njin::water3d_unfloat (context &ctx, water3d_handle water, body3d_handle body) |
| Thôi cho body nổi trên mặt nước. | |
| void | njin::weather3d_cover_set (context &ctx, const weather3d_cover *covers, i32 count) |
| Đặt các chỗ có mái (thay danh sách cũ), thêm vào phần weather3d::cover_auto che: nhà không đổ bóng, mái hiên, hay cả khi tắt cover_auto. | |
| i32 | njin::weather3d_cover_count (const context &ctx) |
| Số chỗ có mái đang đặt bằng weather3d_cover_set(). | |
| weather3d | njin::weather3d_preset (weather3d_kind kind) |
| Một kiểu thời tiết có sẵn. | |
| weather3d | njin::weather3d_lerp (const weather3d &a, const weather3d &b, f32 t) |
| Nội suy giữa hai thời tiết, để trời chuyển mưa dần dần. | |
| vec3 | njin::sky3d_sun_direction (const sky3d &sky) |
| Hướng từ cảnh tới mặt trời (độ dài 1). | |
| light3d | njin::sky3d_light (const sky3d &sky, const light3d &base={}) |
| Ánh sáng theo bầu trời: base với hướng và màu của nắng (ban đêm là trăng), ánh sáng nền theo màu trời, màu sương bằng màu chân trời, và sương của thời tiết (lấy cái dày hơn giữa base và thời tiết). | |
| rgba | njin::sky3d_color (const sky3d &sky, vec3 direction) |
| Màu trời theo hướng nhìn direction (không có mây và sao), như draw_sky3d() vẽ. | |
| void | njin::draw_sky3d (context &ctx, const sky3d &sky) |
| Vẽ bầu trời (nền, mặt trời, mây, sao) phía sau mọi thứ của lần vẽ 3D đang mở, và mưa hay tuyết quanh camera theo thời tiết. | |
Các biến | |
| constexpr i32 | njin::terrain3d_layer_max = 4 |
| Số lớp bề mặt tối đa của một địa hình (cỏ, đất, đá, tuyết...). | |
| constexpr i32 | njin::water3d_wave_max = 8 |
| Số sóng tối đa của một mặt nước. | |
Địa hình có va chạm và sửa được lúc chạy, cỏ, vật rải, nước có sóng và vật nổi, bầu trời theo giờ, thời tiết.
Kiểu sửa của njin::terrain3d_brush.
| enum njin::weather3d_kind |
Các kiểu thời tiết có sẵn cho weather3d_preset().
| Enumerator | |
|---|---|
| weather3d_clear | Trời quang, ít mây. |
| weather3d_overcast | U ám, không có nắng gắt. |
| weather3d_rain | Mưa, đất ướt. |
| weather3d_snow | Tuyết rơi. |
| weather3d_fog | Sương mù dày. |
| terrain3d_handle njin::terrain3d_create | ( | context & | ctx, |
| const terrain3d_desc & | desc ) |
Tạo địa hình.
Gọi được ở mọi phase (không cần begin_3d()).
Ảnh của các lớp được bật mipmap (texture_set_filter() với njin::filter_mipmap) để mặt đất ở xa không nhấp nháy.
| ctx | Context của engine. |
| desc | Cách dựng. |
| void njin::terrain3d_destroy | ( | context & | ctx, |
| terrain3d_handle | handle ) |
Hủy địa hình cùng body va chạm của nó.
Cỏ và vật rải trên nó không còn vẽ.
| ctx | Context của engine. |
| handle | Địa hình. Handle không hợp lệ bị bỏ qua. |
| void njin::draw_terrain3d | ( | const context & | ctx, |
| terrain3d_handle | handle ) |
Vẽ địa hình trong lần vẽ 3D đang mở (giữa begin_3d() và end_3d()).
Nhận ánh sáng, bóng đổ, đèn và sương mù như mọi hình 3D.
| ctx | Context của engine. |
| handle | Địa hình. |
| f32 njin::terrain3d_height | ( | const context & | ctx, |
| terrain3d_handle | handle, | ||
| f32 | x, | ||
| f32 | z ) |
Độ cao mặt đất tại (x, z), đúng như lưới vẽ ở mức chi tiết cao nhất và như body va chạm (cùng cách chia ô thành tam giác).
Ngoài địa hình thì lấy mép gần nhất.
| ctx | Context của engine. |
| handle | Địa hình. |
| x | Toạ độ x, mét. |
| z | Toạ độ z, mét. |
| vec3 njin::terrain3d_normal | ( | const context & | ctx, |
| terrain3d_handle | handle, | ||
| f32 | x, | ||
| f32 | z ) |
Pháp tuyến mặt đất tại (x, z) (độ dài 1, hướng lên).
| ctx | Context của engine. |
| handle | Địa hình. |
| x | Toạ độ x, mét. |
| z | Toạ độ z, mét. |
| bool njin::terrain3d_contains | ( | const context & | ctx, |
| terrain3d_handle | handle, | ||
| f32 | x, | ||
| f32 | z ) |
(x, z) có nằm trên địa hình không.
| ctx | Context của engine. |
| handle | Địa hình. |
| x | Toạ độ x, mét. |
| z | Toạ độ z, mét. |
| f32 njin::terrain3d_layer_weight | ( | const context & | ctx, |
| terrain3d_handle | handle, | ||
| f32 | x, | ||
| f32 | z, | ||
| i32 | layer ) |
Trọng số của lớp layer tại (x, z), 0 đến 1 (các lớp cộng lại bằng 1).
Để biết nhân vật đang đứng trên gì (tiếng bước chân cỏ hay đá).
| ctx | Context của engine. |
| handle | Địa hình. |
| x | Toạ độ x, mét. |
| z | Toạ độ z, mét. |
| layer | 0..njin::terrain3d_layer_max - 1. |
| body3d_handle njin::terrain3d_body | ( | const context & | ctx, |
| terrain3d_handle | handle ) |
Body va chạm của địa hình (tĩnh), để nhận ra nó trong raycast và va chạm.
| ctx | Context của engine. |
| handle | Địa hình. |
| void njin::terrain3d_edit | ( | context & | ctx, |
| terrain3d_handle | handle, | ||
| const terrain3d_brush & | brush ) |
Sửa độ cao địa hình bằng một nét: lưới vẽ, body va chạm, lớp tự phủ, cỏ và vật rải trên vùng đó đều theo ngay (vật rải giữ chỗ, chỉ đổi độ cao).
| ctx | Context của engine. |
| handle | Địa hình. |
| brush | Nét sửa. |
| void njin::terrain3d_paint | ( | context & | ctx, |
| terrain3d_handle | handle, | ||
| vec3 | center, | ||
| f32 | radius, | ||
| i32 | layer, | ||
| f32 | strength ) |
Vẽ thêm lớp layer lên địa hình quanh center (lớp khác nhạt đi).
Nét vẽ được giữ khi sửa độ cao, kể cả khi auto_splat bật.
| ctx | Context của engine. |
| handle | Địa hình. |
| center | Tâm (dùng x và z). |
| radius | Bán kính, mét. |
| layer | Lớp. |
| strength | Mỗi lần thêm bao nhiêu ở tâm, 0..1. |
| grass3d_handle njin::grass3d_create | ( | context & | ctx, |
| const grass3d_desc & | desc ) |
Tạo thảm cỏ.
Cỏ tự mọc lại theo vùng khi địa hình bị sửa (terrain3d_edit()).
| ctx | Context của engine. |
| desc | Cách mọc. |
| void njin::grass3d_destroy | ( | context & | ctx, |
| grass3d_handle | handle ) |
Hủy thảm cỏ.
| ctx | Context của engine. |
| handle | Thảm cỏ. Handle không hợp lệ bị bỏ qua. |
| void njin::draw_grass3d | ( | const context & | ctx, |
| grass3d_handle | handle ) |
Vẽ cỏ quanh camera của lần vẽ 3D đang mở.
| ctx | Context của engine. |
| handle | Thảm cỏ. |
| i32 njin::grass3d_drawn | ( | const context & | ctx, |
| grass3d_handle | handle ) |
Số ngọn cỏ vẽ ở lần vẽ 3D gần nhất, để đo.
| ctx | Context của engine. |
| handle | Thảm cỏ. |
| void njin::wind3d_set | ( | context & | ctx, |
| vec2 | wind ) |
Đặt gió cho cỏ, mây và mưa: vận tốc trên mặt xz, mét mỗi giây.
draw_sky3d() đặt lại bằng weather3d::wind mỗi frame.
| ctx | Context của engine. |
| wind | Vận tốc gió (x, z). |
| vec2 njin::wind3d_get | ( | const context & | ctx | ) |
Gió đang dùng.
| ctx | Context của engine. |
| scatter3d_handle njin::scatter3d_create | ( | context & | ctx, |
| const scatter3d_desc & | desc ) |
Rải vật lên địa hình.
| ctx | Context của engine. |
| desc | Cách rải. |
| void njin::scatter3d_destroy | ( | context & | ctx, |
| scatter3d_handle | handle ) |
Hủy lớp vật rải.
| ctx | Context của engine. |
| handle | Lớp vật rải. Handle không hợp lệ bị bỏ qua. |
| void njin::draw_scatter3d | ( | const context & | ctx, |
| scatter3d_handle | handle ) |
Vẽ các vật rải trong tầm nhìn của lần vẽ 3D đang mở (bằng draw_instanced3d()).
| ctx | Context của engine. |
| handle | Lớp vật rải. |
| i32 njin::scatter3d_count | ( | const context & | ctx, |
| scatter3d_handle | handle ) |
Số vật đã rải.
| ctx | Context của engine. |
| handle | Lớp vật rải. |
| i32 njin::scatter3d_transforms | ( | const context & | ctx, |
| scatter3d_handle | handle, | ||
| transform3d * | out, | ||
| i32 | count ) |
Vị trí, hướng và tỉ lệ của các vật đã rải, để game thêm va chạm (body3d_create()) cho cây hay đá to.
| ctx | Context của engine. |
| handle | Lớp vật rải. |
| out | Mảng nhận, hoặc nullptr để chỉ đếm. |
| count | Số phần tử của out. |
| water3d_handle njin::water3d_create | ( | context & | ctx, |
| const water3d_desc & | desc ) |
Tạo mặt nước.
| ctx | Context của engine. |
| desc | Cách dựng. |
| void njin::water3d_destroy | ( | context & | ctx, |
| water3d_handle | handle ) |
Hủy mặt nước.
Vật đang nổi trên nó thôi nổi.
| ctx | Context của engine. |
| handle | Mặt nước. Handle không hợp lệ bị bỏ qua. |
| void njin::water3d_set | ( | context & | ctx, |
| water3d_handle | handle, | ||
| const water3d_desc & | desc ) |
Đổi cách dựng của mặt nước (sóng to lên khi bão, mực nước dâng).
| ctx | Context của engine. |
| handle | Mặt nước. |
| desc | Cách dựng mới. |
| water3d_desc njin::water3d_get | ( | const context & | ctx, |
| water3d_handle | handle ) |
Cách dựng hiện tại.
| ctx | Context của engine. |
| handle | Mặt nước. |
| void njin::draw_water3d | ( | const context & | ctx, |
| water3d_handle | handle ) |
Vẽ mặt nước trong lần vẽ 3D đang mở.
Nước vẽ sau mọi hình đục, như kính.
| ctx | Context của engine. |
| handle | Mặt nước. |
| f32 njin::water3d_height | ( | const context & | ctx, |
| water3d_handle | handle, | ||
| f32 | x, | ||
| f32 | z ) |
Độ cao mặt nước tại (x, z) vào lúc này, theo đúng công thức sóng của shader.
Ngoài hồ thì là level.
| ctx | Context của engine. |
| handle | Mặt nước. |
| x | Toạ độ x, mét. |
| z | Toạ độ z, mét. |
| vec3 njin::water3d_normal | ( | const context & | ctx, |
| water3d_handle | handle, | ||
| f32 | x, | ||
| f32 | z ) |
Pháp tuyến mặt nước tại (x, z) vào lúc này.
| ctx | Context của engine. |
| handle | Mặt nước. |
| x | Toạ độ x, mét. |
| z | Toạ độ z, mét. |
| f32 njin::water3d_time | ( | const context & | ctx | ) |
Đồng hồ của sóng, giây: chạy theo delta(), nên dừng khi game tạm dừng.
| ctx | Context của engine. |
| void njin::water3d_float | ( | context & | ctx, |
| water3d_handle | water, | ||
| body3d_handle | body, | ||
| const buoyancy3d & | buoyancy = {} ) |
Cho body động nổi trên mặt nước: mỗi bước vật lý, phần thể tích dưới mặt sóng (tại tâm của body) đẩy nó lên, và nước cản nó lại, nên thùng gỗ dập dềnh theo sóng.
Gọi lại với cùng body để đổi buoyancy.
| ctx | Context của engine. |
| water | Mặt nước. |
| body | Body động. |
| buoyancy | Lực nổi và lực cản. |
| void njin::water3d_unfloat | ( | context & | ctx, |
| water3d_handle | water, | ||
| body3d_handle | body ) |
Thôi cho body nổi trên mặt nước.
| ctx | Context của engine. |
| water | Mặt nước. |
| body | Body. |
| void njin::weather3d_cover_set | ( | context & | ctx, |
| const weather3d_cover * | covers, | ||
| i32 | count ) |
Đặt các chỗ có mái (thay danh sách cũ), thêm vào phần weather3d::cover_auto che: nhà không đổ bóng, mái hiên, hay cả khi tắt cover_auto.
Tối đa 16 hộp; hộp có vị trí hay cỡ không phải số hữu hạn bị bỏ.
| ctx | Context của engine. |
| covers | Các hộp, hoặc nullptr khi count là 0 (xóa hết). |
| count | Số hộp. |
| i32 njin::weather3d_cover_count | ( | const context & | ctx | ) |
Số chỗ có mái đang đặt bằng weather3d_cover_set().
| ctx | Context của engine. |
| weather3d njin::weather3d_preset | ( | weather3d_kind | kind | ) |
Một kiểu thời tiết có sẵn.
Là giá trị thường, sửa thoải mái trước khi dùng.
| kind | Kiểu. |
Nội suy giữa hai thời tiết, để trời chuyển mưa dần dần.
| a | Thời tiết ở t = 0. |
| b | Thời tiết ở t = 1. |
| t | Tiến độ, 0..1. |
Hướng từ cảnh tới mặt trời (độ dài 1).
y âm là mặt trời đã lặn.
| sky | Bầu trời. |
Ánh sáng theo bầu trời: base với hướng và màu của nắng (ban đêm là trăng), ánh sáng nền theo màu trời, màu sương bằng màu chân trời, và sương của thời tiết (lấy cái dày hơn giữa base và thời tiết).
Bóng đổ giữ như base.
| sky | Bầu trời. |
| base | Ánh sáng gốc (cài đặt bóng đổ). |
Màu trời theo hướng nhìn direction (không có mây và sao), như draw_sky3d() vẽ.
Cho nền 2D, màu xóa màn hình, hay biết trời đang sáng hay tối.
| sky | Bầu trời. |
| direction | Hướng nhìn. |
| void njin::draw_sky3d | ( | context & | ctx, |
| const sky3d & | sky ) |
Vẽ bầu trời (nền, mặt trời, mây, sao) phía sau mọi thứ của lần vẽ 3D đang mở, và mưa hay tuyết quanh camera theo thời tiết.
Đặt gió (wind3d_set()) và độ ướt của mặt đất; với sky3d::drive_light thì đặt cả ánh sáng của lần vẽ.
Gọi ở bất kỳ đâu giữa begin_3d() và end_3d(): trời chỉ phủ chỗ chưa có gì vẽ.
| ctx | Context của engine. |
| sky | Bầu trời. |