Cách dựng một địa hình bằng terrain3d_create(). Tiếp...
#include <njin_world3d.h>
Các thuộc tính Public | |
| vec3 | origin {0.0f, 0.0f, 0.0f} |
| Góc x nhỏ nhất, z nhỏ nhất; y cộng vào mọi độ cao. | |
| f32 | size = 256.0f |
| Cạnh hình vuông, mét. | |
| i32 | resolution = 257 |
| Số mẫu độ cao mỗi cạnh (ít nhất 3). Khoảng cách hai mẫu là size / (resolution - 1). | |
| const f32 * | heights = nullptr |
| Độ cao từng mẫu, mét (cộng origin.y), resolution * resolution số theo hàng (hàng z, rồi cột x). | |
| const char * | heightmap = nullptr |
| Ảnh độ cao: ảnh xám (kênh đỏ, 0 đến 1) hoặc file .r16/.raw (16 bit, vuông, little-endian). | |
| noise_desc | noise {.seed = 1, .frequency = 0.004f, .fractal = fractal_fbm, .octaves = 5} |
| Nhiễu sinh độ cao khi không có hai nguồn trên, tính theo mét của thế giới (frequency là số gò mỗi mét). | |
| f32 | height_scale = 40.0f |
| Giá trị 1 của ảnh hay nhiễu thành bao nhiêu mét. | |
| i32 | smooth = 0 |
| Số lượt làm mượt độ cao (trung bình 3 x 3) sau khi đọc. | |
| terrain3d_layer | layers [terrain3d_layer_max] {} |
| Các lớp bề mặt. | |
| i32 | layer_count = 1 |
| Số lớp dùng, 1 đến njin::terrain3d_layer_max. | |
| bool | auto_splat = true |
| Tự tính lớp nào phủ chỗ nào theo quy tắc của mỗi lớp. | |
| const char * | splatmap = nullptr |
| Ảnh trọng số các lớp khi tắt auto_splat: kênh đỏ, lục, lam, alpha là lớp 0 đến 3. | |
| i32 | chunk_quads = 32 |
| Số ô mỗi cạnh của một mảnh: 8, 16, 32, 64 hoặc 128. | |
| f32 | lod_distance = 60.0f |
| Mảnh gần hơn khoảng này (mét) vẽ đủ chi tiết. | |
| i32 | lod_levels = 4 |
| Số mức chi tiết, 1 đến 6. | |
| f32 | specular = 0.05f |
| Độ bóng của mặt đất (ướt thì tăng thêm, xem njin::weather3d). | |
| f32 | shininess = 16.0f |
| Độ nhọn điểm sáng bóng. | |
| bool | cast_shadows = true |
| Đổ bóng (đồi che nắng). Luôn nhận bóng. | |
| bool | collision = true |
| Tạo body va chạm (height field của Jolt) cho nhân vật, xe và vật. | |
| f32 | friction = 0.8f |
| Ma sát của body va chạm. | |
| u64 | user = 0 |
| Giá trị body3d_user() của body va chạm. | |
Cách dựng một địa hình bằng terrain3d_create().
Địa hình là một lưới độ cao vuông resolution x resolution mẫu, phủ một hình vuông cạnh size mét có góc (x nhỏ nhất, z nhỏ nhất) ở origin. Độ cao lấy từ heights, hoặc nếu không có thì từ heightmap, hoặc nếu không có nữa thì từ noise.
Engine chia lưới thành các mảnh chunk_quads x chunk_quads ô, bỏ mảnh ngoài tầm nhìn, và vẽ mảnh ở xa với ít chi tiết hơn (mỗi lần xa gấp đôi lod_distance thì bớt một nửa số ô mỗi cạnh). Mép mảnh có "váy" thả xuống nên hai mảnh khác mức chi tiết không hở khe.
| const f32* njin::terrain3d_desc::heights = nullptr |
Độ cao từng mẫu, mét (cộng origin.y), resolution * resolution số theo hàng (hàng z, rồi cột x).
Được chép lại. nullptr là dùng nguồn sau.
| const char* njin::terrain3d_desc::heightmap = nullptr |
Ảnh độ cao: ảnh xám (kênh đỏ, 0 đến 1) hoặc file .r16/.raw (16 bit, vuông, little-endian).
Được co giãn về resolution. Ảnh 8 bit chỉ có 256 bậc: đặt smooth để mượt bậc. nullptr là dùng noise.
| noise_desc njin::terrain3d_desc::noise {.seed = 1, .frequency = 0.004f, .fractal = fractal_fbm, .octaves = 5} |
Nhiễu sinh độ cao khi không có hai nguồn trên, tính theo mét của thế giới (frequency là số gò mỗi mét).
Kết quả được kéo giãn cho thấp nhất là 0 và cao nhất là 1 trước khi nhân height_scale.
| bool njin::terrain3d_desc::auto_splat = true |
Tự tính lớp nào phủ chỗ nào theo quy tắc của mỗi lớp.
Tắt thì dùng splatmap (hoặc chỉ lớp 0), và vẽ thêm bằng terrain3d_paint().
| const char* njin::terrain3d_desc::splatmap = nullptr |
Ảnh trọng số các lớp khi tắt auto_splat: kênh đỏ, lục, lam, alpha là lớp 0 đến 3.
Được co giãn về resolution. nullptr là chỉ lớp 0.