njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
njin_world3d.h
1#pragma once
2#include "_math.h"
3#include "njin_3d.h"
4#include "njin_procgen.h"
5
6namespace njin {
7struct context;
8
11
12// ---------------------------------------------------------------------------
13// Địa hình
14// ---------------------------------------------------------------------------
15
17inline constexpr i32 terrain3d_layer_max = 4;
18
28 rgba color{1.0f, 1.0f, 1.0f, 1.0f};
29 f32 tile = 4.0f;
35 f32 min_height = -1.0e9f;
36 f32 max_height = 1.0e9f;
37 f32 min_slope = 0.0f;
38 f32 max_slope = 90.0f;
39 f32 blend = 3.0f;
41};
42
55 vec3 origin{0.0f, 0.0f, 0.0f};
56 f32 size = 256.0f;
61 const f32 *heights = nullptr;
65 const char *heightmap = nullptr;
69 noise_desc noise{.seed = 1, .frequency = 0.004f, .fractal = fractal_fbm, .octaves = 5};
70 f32 height_scale = 40.0f;
71 i32 smooth = 0;
76 bool auto_splat = true;
79 const char *splatmap = nullptr;
81 f32 lod_distance = 60.0f;
83 f32 specular = 0.05f;
84 f32 shininess = 16.0f;
85 bool cast_shadows = true;
86 bool collision = true;
87 f32 friction = 0.8f;
88 u64 user = 0;
89};
90
99
103void terrain3d_destroy(context &ctx, terrain3d_handle handle);
104
109void draw_terrain3d(const context &ctx, terrain3d_handle handle);
110
118f32 terrain3d_height(const context &ctx, terrain3d_handle handle, f32 x, f32 z);
119
126vec3 terrain3d_normal(const context &ctx, terrain3d_handle handle, f32 x, f32 z);
127
134bool terrain3d_contains(const context &ctx, terrain3d_handle handle, f32 x, f32 z);
135
144f32 terrain3d_layer_weight(const context &ctx, terrain3d_handle handle, f32 x, f32 z, i32 layer);
145
151
159
170
176void terrain3d_edit(context &ctx, terrain3d_handle handle, const terrain3d_brush &brush);
177
186void terrain3d_paint(context &ctx, terrain3d_handle handle, vec3 center, f32 radius, i32 layer, f32 strength);
187
188// ---------------------------------------------------------------------------
189// Cỏ và vật rải
190// ---------------------------------------------------------------------------
191
200 f32 density = 6.0f;
201 f32 height = 0.45f;
203 f32 width = 0.05f;
204 rgba base_color{0.12f, 0.30f, 0.07f, 1.0f};
205 rgba tip_color{0.52f, 0.70f, 0.28f, 1.0f};
210 f32 max_slope = 35.0f;
212 noise_desc patches{.seed = 3, .frequency = 0.06f, .octaves = 2};
215 f32 fade = 20.0f;
216 f32 sway = 1.0f;
217 u32 seed = 1;
218 bool cast_shadows = false;
219};
220
225grass3d_handle grass3d_create(context &ctx, const grass3d_desc &desc);
226
230void grass3d_destroy(context &ctx, grass3d_handle handle);
231
235void draw_grass3d(const context &ctx, grass3d_handle handle);
236
241i32 grass3d_drawn(const context &ctx, grass3d_handle handle);
242
247void wind3d_set(context &ctx, vec2 wind);
248
252vec2 wind3d_get(const context &ctx);
253
264 f32 density = 0.02f;
265 f32 spacing = 2.0f;
266 f32 min_height = -1.0e9f;
267 f32 max_height = 1.0e9f;
268 f32 min_slope = 0.0f;
269 f32 max_slope = 30.0f;
270 i32 layer = -1;
271 f32 layer_min = 0.5f;
272 noise_desc patches{.seed = 5, .frequency = 0.02f, .octaves = 2};
274 f32 scale_min = 0.8f;
275 f32 scale_max = 1.2f;
276 f32 align = 0.0f;
277 f32 sink = 0.0f;
278 rgba color{1.0f, 1.0f, 1.0f, 1.0f};
282 u32 seed = 1;
283};
284
290
294void scatter3d_destroy(context &ctx, scatter3d_handle handle);
295
299void draw_scatter3d(const context &ctx, scatter3d_handle handle);
300
305i32 scatter3d_count(const context &ctx, scatter3d_handle handle);
306
314i32 scatter3d_transforms(const context &ctx, scatter3d_handle handle, transform3d *out, i32 count);
315
316// ---------------------------------------------------------------------------
317// Nước
318// ---------------------------------------------------------------------------
319
321inline constexpr i32 water3d_wave_max = 8;
322
326 vec2 direction{1.0f, 0.0f};
327 f32 wavelength = 12.0f;
331 f32 speed = 1.0f;
332};
333
345 f32 level = 0.0f;
346 vec2 center{0.0f, 0.0f};
347 vec2 size{0.0f, 0.0f};
349 water3d_wave waves[water3d_wave_max]{{{1.0f, 0.3f}, 9.0f, 0.18f, 1.0f},
350 {{0.6f, -0.8f}, 5.5f, 0.14f, 1.0f},
351 {{-0.4f, 1.0f}, 3.1f, 0.10f, 1.0f}};
353 rgba shallow_color{0.10f, 0.42f, 0.45f, 1.0f};
354 rgba deep_color{0.02f, 0.09f, 0.16f, 1.0f};
356 f32 clarity = 1.5f;
357 rgba foam_color{0.95f, 0.97f, 1.0f, 1.0f};
359 f32 crest_foam = 0.35f;
360 f32 ripples = 0.35f;
361 f32 specular = 1.0f;
362 f32 shininess = 300.0f;
365 f32 detail = 1.0f;
366};
367
372water3d_handle water3d_create(context &ctx, const water3d_desc &desc);
373
377void water3d_destroy(context &ctx, water3d_handle handle);
378
383void water3d_set(context &ctx, water3d_handle handle, const water3d_desc &desc);
384
389water3d_desc water3d_get(const context &ctx, water3d_handle handle);
390
394void draw_water3d(const context &ctx, water3d_handle handle);
395
403f32 water3d_height(const context &ctx, water3d_handle handle, f32 x, f32 z);
404
411vec3 water3d_normal(const context &ctx, water3d_handle handle, f32 x, f32 z);
412
416f32 water3d_time(const context &ctx);
417
421 f32 buoyancy = 1.4f;
424 vec3 flow{0.0f, 0.0f, 0.0f};
425};
426
434void water3d_float(context &ctx, water3d_handle water, body3d_handle body, const buoyancy3d &buoyancy = {});
435
440void water3d_unfloat(context &ctx, water3d_handle water, body3d_handle body);
441
442// ---------------------------------------------------------------------------
443// Bầu trời và thời tiết
444// ---------------------------------------------------------------------------
445
447struct weather3d {
448 f32 clouds = 0.3f;
450 f32 fog = 0.0f;
451 f32 rain = 0.0f;
452 f32 snow = 0.0f;
453 vec2 wind{2.0f, 0.6f};
454 f32 wetness = 0.0f;
460 bool cover_auto = true;
461};
462
467 vec3 center{0.0f, 0.0f, 0.0f};
468 vec3 size{1.0f, 1.0f, 1.0f};
469};
470
477void weather3d_cover_set(context &ctx, const weather3d_cover *covers, i32 count);
478
482i32 weather3d_cover_count(const context &ctx);
483
492
497
504
510struct sky3d {
511 f32 hour = 10.0f;
512 f32 latitude = 35.0f;
514 f32 season = 0.0f;
515 f32 north = 0.0f;
517 f32 cloud_height = 900.0f;
519 bool stars = true;
520 f32 sun_size = 1.0f;
524 bool drive_light = true;
525};
526
531
538light3d sky3d_light(const sky3d &sky, const light3d &base = {});
539
545rgba sky3d_color(const sky3d &sky, vec3 direction);
546
554void draw_sky3d(context &ctx, const sky3d &sky);
556} // namespace njin
@ fractal_fbm
Cộng các lớp càng lúc càng nhỏ và nhạt: địa hình tự nhiên. Mặc định.
Definition njin_procgen.h:74
std::int32_t i32
Số nguyên có dấu 32 bit.
Definition _types.h:14
std::uint64_t u64
Số nguyên không dấu 64 bit.
Definition _types.h:23
float f32
Số thực 32 bit.
Definition _types.h:28
std::uint32_t u32
Số nguyên không dấu 32 bit.
Definition _types.h:22
void draw_water3d(const context &ctx, water3d_handle handle)
Vẽ mặt nước trong lần vẽ 3D đang mở.
i32 grass3d_drawn(const context &ctx, grass3d_handle handle)
Số ngọn cỏ vẽ ở lần vẽ 3D gần nhất, để đo.
void 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,...
void grass3d_destroy(context &ctx, grass3d_handle handle)
Hủy thảm cỏ.
void 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 t...
f32 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).
void 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()).
i32 weather3d_cover_count(const context &ctx)
Số chỗ có mái đang đặt bằng weather3d_cover_set().
void 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).
f32 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.
void draw_grass3d(const context &ctx, grass3d_handle handle)
Vẽ cỏ quanh camera của lần vẽ 3D đang mở.
void 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 water3d_get(const context &ctx, water3d_handle handle)
Cách dựng hiện tại.
bool terrain3d_contains(const context &ctx, terrain3d_handle handle, f32 x, f32 z)
(x, z) có nằm trên địa hình không.
i32 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.
terrain3d_handle terrain3d_create(context &ctx, const terrain3d_desc &desc)
Tạo địa hình.
body3d_handle 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.
vec3 sky3d_sun_direction(const sky3d &sky)
Hướng từ cảnh tới mặt trời (độ dài 1).
void scatter3d_destroy(context &ctx, scatter3d_handle handle)
Hủy lớp vật rải.
constexpr i32 water3d_wave_max
Số sóng tối đa của một mặt nước.
Definition njin_world3d.h:321
terrain3d_brush_kind
Kiểu sửa của njin::terrain3d_brush.
Definition njin_world3d.h:153
constexpr i32 terrain3d_layer_max
Số lớp bề mặt tối đa của một địa hình (cỏ, đất, đá, tuyết...).
Definition njin_world3d.h:17
weather3d 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.
weather3d_kind
Các kiểu thời tiết có sẵn cho weather3d_preset().
Definition njin_world3d.h:485
f32 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 ch...
i32 scatter3d_count(const context &ctx, scatter3d_handle handle)
Số vật đã rải.
scatter3d_handle scatter3d_create(context &ctx, const scatter3d_desc &desc)
Rải vật lên địa hình.
void terrain3d_destroy(context &ctx, terrain3d_handle handle)
Hủy địa hình cùng body va chạm của nó.
f32 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 water3d_unfloat(context &ctx, water3d_handle water, body3d_handle body)
Thôi cho body nổi trên mặt nước.
void 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 ...
rgba 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ẽ.
vec2 wind3d_get(const context &ctx)
Gió đang dùng.
vec3 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.
void 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()).
void 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 ...
grass3d_handle grass3d_create(context &ctx, const grass3d_desc &desc)
Tạo thảm cỏ.
vec3 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).
weather3d weather3d_preset(weather3d_kind kind)
Một kiểu thời tiết có sẵn.
light3d 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...
void 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.
water3d_handle water3d_create(context &ctx, const water3d_desc &desc)
Tạo mặt nước.
void water3d_destroy(context &ctx, water3d_handle handle)
Hủy mặt nước.
@ terrain3d_raise
Nâng lên strength mét ở tâm.
Definition njin_world3d.h:154
@ terrain3d_flatten
Kéo về độ cao height, một phần strength (0..1) mỗi lần.
Definition njin_world3d.h:156
@ terrain3d_lower
Hạ xuống strength mét ở tâm.
Definition njin_world3d.h:155
@ terrain3d_smooth
Làm mượt, một phần strength (0..1) mỗi lần.
Definition njin_world3d.h:157
@ weather3d_snow
Tuyết rơi.
Definition njin_world3d.h:489
@ weather3d_rain
Mưa, đất ướt.
Definition njin_world3d.h:488
@ weather3d_overcast
U ám, không có nắng gắt.
Definition njin_world3d.h:487
@ weather3d_clear
Trời quang, ít mây.
Definition njin_world3d.h:486
@ weather3d_fog
Sương mù dày.
Definition njin_world3d.h:490
Định danh của một body vật lý 3D, tạo bởi body3d_create().
Definition _types.h:160
Cách một body nổi trên nước (water3d_float()).
Definition njin_world3d.h:419
vec3 flow
Dòng chảy kéo vật theo, mét mỗi giây.
Definition njin_world3d.h:424
f32 buoyancy
Lực nổi: 1 là lơ lửng, lớn hơn 1 là nổi (gỗ, thuyền), nhỏ hơn 1 là chìm dần.
Definition njin_world3d.h:421
f32 linear_drag
Nước cản chuyển động.
Definition njin_world3d.h:422
f32 angular_drag
Nước cản xoay.
Definition njin_world3d.h:423
Cách mọc của một thảm cỏ trên địa hình (grass3d_create()).
Definition njin_world3d.h:198
bool cast_shadows
Ngọn cỏ đổ bóng (tốn: mọi ngọn vẽ thêm vào ảnh bóng). Luôn nhận bóng.
Definition njin_world3d.h:218
f32 sway
Đung đưa theo gió nhiều hay ít. 0 là đứng yên.
Definition njin_world3d.h:216
f32 color_jitter
Mỗi ngọn sáng tối khác nhau tới tỉ lệ này.
Definition njin_world3d.h:206
noise_desc patches
Nhiễu chia cỏ thành đám (tính theo mét), dùng khi patchiness > 0.
Definition njin_world3d.h:212
f32 fade
Cỏ thấp dần trong khoảng này trước draw_distance, mét.
Definition njin_world3d.h:215
f32 patchiness
0 là mọc đều; 1 là thành đám rõ, giữa các đám trống.
Definition njin_world3d.h:213
u32 seed
Hạt giống: cùng hạt giống thì cỏ mọc y như nhau.
Definition njin_world3d.h:217
f32 height_jitter
Ngọn cao thấp khác nhau tới tỉ lệ này của height.
Definition njin_world3d.h:202
f32 density
Số ngọn mỗi mét vuông nơi mọc dày nhất.
Definition njin_world3d.h:200
rgba base_color
Màu ở gốc.
Definition njin_world3d.h:204
rgba tip_color
Màu ở ngọn.
Definition njin_world3d.h:205
f32 max_slope
Không mọc chỗ dốc hơn, độ.
Definition njin_world3d.h:210
f32 width
Bề rộng gốc ngọn, mét.
Definition njin_world3d.h:203
terrain3d_handle terrain
Địa hình cỏ mọc trên.
Definition njin_world3d.h:199
f32 height
Chiều cao ngọn, mét.
Definition njin_world3d.h:201
i32 layer
Lớp địa hình cỏ mọc trên: số ngọn nhân với trọng số của lớp đó (terrain3d_layer_weight()).
Definition njin_world3d.h:209
f32 draw_distance
Xa hơn khoảng này không có cỏ, mét.
Definition njin_world3d.h:214
Định danh của một thảm cỏ trên địa hình, tạo bởi grass3d_create().
Definition _types.h:243
Ánh sáng chung của cảnh 3D: mặt trời (ánh sáng hướng), ánh sáng nền, bóng đổ của mặt trời và sương mù...
Definition njin_3d.h:72
Định danh của một model 3D, tạo bởi model_load().
Definition _types.h:153
Tham số của một nguồn nhiễu.
Definition njin_procgen.h:84
Màu gồm đỏ, xanh lá, xanh dương và alpha.
Definition _types.h:64
Cách rải một loại vật (đá, cây, bụi) lên địa hình (scatter3d_create()).
Definition njin_world3d.h:260
f32 min_slope
Độ dốc nhỏ nhất, độ.
Definition njin_world3d.h:268
f32 sink
Lún xuống đất bấy nhiêu mét (chân đá không lơ lửng trên dốc).
Definition njin_world3d.h:277
model_handle model
Model vẽ ở gần.
Definition njin_world3d.h:262
f32 draw_distance
Xa hơn thì không vẽ, mét.
Definition njin_world3d.h:281
f32 scale_min
Tỉ lệ nhỏ nhất.
Definition njin_world3d.h:274
f32 lod_distance
Xa hơn thì dùng far_model, mét.
Definition njin_world3d.h:280
f32 max_height
Chỉ đặt chỗ thấp hơn mức này, mét.
Definition njin_world3d.h:267
f32 align
0 là đứng thẳng (cây); 1 là nghiêng theo mặt đất (đá).
Definition njin_world3d.h:276
terrain3d_handle terrain
Địa hình.
Definition njin_world3d.h:261
noise_desc patches
Nhiễu chia thành cụm, khi patchiness > 0.
Definition njin_world3d.h:272
rgba color
Màu nhân vào model.
Definition njin_world3d.h:278
f32 layer_min
Trọng số tối thiểu của layer.
Definition njin_world3d.h:271
f32 min_height
Chỉ đặt chỗ cao từ mức này, mét.
Definition njin_world3d.h:266
f32 density
Số vật mỗi mét vuông nơi dày nhất.
Definition njin_world3d.h:264
model_handle far_model
Model đơn giản hơn cho chỗ xa. Không hợp lệ là dùng model.
Definition njin_world3d.h:263
f32 color_jitter
Mỗi vật sáng tối khác nhau tới tỉ lệ này.
Definition njin_world3d.h:279
f32 scale_max
Tỉ lệ lớn nhất.
Definition njin_world3d.h:275
f32 spacing
Hai vật cách nhau ít nhất bấy nhiêu mét.
Definition njin_world3d.h:265
f32 max_slope
Độ dốc lớn nhất, độ.
Definition njin_world3d.h:269
i32 layer
Chỉ đặt trên lớp này (trọng số từ layer_min); -1 là mọi lớp.
Definition njin_world3d.h:270
f32 patchiness
0 là rải đều; 1 là thành cụm (rừng, bãi đá).
Definition njin_world3d.h:273
u32 seed
Hạt giống.
Definition njin_world3d.h:282
Định danh của một lớp vật rải trên địa hình (đá, cây), tạo bởi scatter3d_create().
Definition _types.h:250
Bầu trời theo giờ trong ngày, dùng với draw_sky3d().
Definition njin_world3d.h:510
bool stars
Có sao ban đêm.
Definition njin_world3d.h:519
f32 cloud_scale
Cỡ đám mây; lớn là đám to hơn.
Definition njin_world3d.h:518
bool drive_light
draw_sky3d() đặt ánh sáng của lần vẽ (light3d_set()) theo trời: hướng nắng (hay trăng),...
Definition njin_world3d.h:524
f32 cloud_height
Độ cao lớp mây, mét.
Definition njin_world3d.h:517
f32 north
Xoay cả bầu trời quanh trục y, độ (hướng bắc của bản đồ).
Definition njin_world3d.h:515
weather3d weather
Thời tiết.
Definition njin_world3d.h:516
f32 season
Mùa, -1 (giữa đông) đến 1 (giữa hè): ngày dài hay ngắn, mặt trời cao hay thấp.
Definition njin_world3d.h:514
f32 latitude
Vĩ độ, độ: càng xa xích đạo mặt trời càng thấp.
Definition njin_world3d.h:512
f32 hour
Giờ trong ngày, 0..24 (lẻ được: 6.5 là 6 giờ 30).
Definition njin_world3d.h:511
f32 sun_size
Cỡ mặt trời trên trời, nhân với cỡ thật.
Definition njin_world3d.h:520
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.
Definition njin_world3d.h:161
f32 height
Độ cao đích của terrain3d_flatten, mét.
Definition njin_world3d.h:166
f32 strength
Mét (nâng, hạ) hoặc tỉ lệ 0..1 (san phẳng, làm mượt).
Definition njin_world3d.h:165
vec3 center
Tâm (dùng x và z).
Definition njin_world3d.h:163
f32 radius
Bán kính, mét.
Definition njin_world3d.h:164
f32 falloff
Phần ngoài của bán kính mờ dần, 0 (cứng) đến 1 (mờ từ tâm).
Definition njin_world3d.h:168
terrain3d_brush_kind kind
Kiểu sửa.
Definition njin_world3d.h:162
Cách dựng một địa hình bằng terrain3d_create().
Definition njin_world3d.h:54
f32 lod_distance
Mảnh gần hơn khoảng này (mét) vẽ đủ chi tiết.
Definition njin_world3d.h:81
const char * splatmap
Ả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.
Definition njin_world3d.h:79
i32 smooth
Số lượt làm mượt độ cao (trung bình 3 x 3) sau khi đọc.
Definition njin_world3d.h:71
f32 shininess
Độ nhọn điểm sáng bóng.
Definition njin_world3d.h:84
i32 chunk_quads
Số ô mỗi cạnh của một mảnh: 8, 16, 32, 64 hoặc 128.
Definition njin_world3d.h:80
bool cast_shadows
Đổ bóng (đồi che nắng). Luôn nhận bóng.
Definition njin_world3d.h:85
noise_desc noise
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...
Definition njin_world3d.h:69
f32 size
Cạnh hình vuông, mét.
Definition njin_world3d.h:56
f32 height_scale
Giá trị 1 của ảnh hay nhiễu thành bao nhiêu mét.
Definition njin_world3d.h:70
f32 specular
Độ bóng của mặt đất (ướt thì tăng thêm, xem njin::weather3d).
Definition njin_world3d.h:83
const f32 * heights
Độ cao từng mẫu, mét (cộng origin.y), resolution * resolution số theo hàng (hàng z,...
Definition njin_world3d.h:61
bool auto_splat
Tự tính lớp nào phủ chỗ nào theo quy tắc của mỗi lớp.
Definition njin_world3d.h:76
i32 layer_count
Số lớp dùng, 1 đến njin::terrain3d_layer_max.
Definition njin_world3d.h:73
vec3 origin
Góc x nhỏ nhất, z nhỏ nhất; y cộng vào mọi độ cao.
Definition njin_world3d.h:55
u64 user
Giá trị body3d_user() của body va chạm.
Definition njin_world3d.h:88
bool collision
Tạo body va chạm (height field của Jolt) cho nhân vật, xe và vật.
Definition njin_world3d.h:86
terrain3d_layer layers[terrain3d_layer_max]
Các lớp bề mặt.
Definition njin_world3d.h:72
i32 lod_levels
Số mức chi tiết, 1 đến 6.
Definition njin_world3d.h:82
i32 resolution
Số mẫu độ cao mỗi cạnh (ít nhất 3). Khoảng cách hai mẫu là size / (resolution - 1).
Definition njin_world3d.h:58
f32 friction
Ma sát của body va chạm.
Definition njin_world3d.h:87
const char * heightmap
Ảnh độ cao: ảnh xám (kênh đỏ, 0 đến 1) hoặc file .r16/.raw (16 bit, vuông, little-endian).
Definition njin_world3d.h:65
Định danh của một địa hình, tạo bởi terrain3d_create().
Definition _types.h:229
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_...
Definition njin_world3d.h:25
f32 min_height
Độ cao thấp nhất, mét (cùng hệ với terrain3d_height()).
Definition njin_world3d.h:35
rgba color
Màu nhân vào ảnh (hoặc màu trơn khi không có ảnh).
Definition njin_world3d.h:28
f32 max_height
Độ cao cao nhất, mét.
Definition njin_world3d.h:36
f32 blend
Độ rộng vùng chuyển: mét cho độ cao, độ cho độ dốc.
Definition njin_world3d.h:39
f32 max_slope
Độ dốc lớn nhất, độ.
Definition njin_world3d.h:38
texture_handle albedo
Ảnh màu. Không hợp lệ là chỉ dùng color.
Definition njin_world3d.h:26
f32 tile
Cạnh một ô ảnh, mét.
Definition njin_world3d.h:29
f32 min_slope
Độ dốc nhỏ nhất, độ (0 là bằng phẳng).
Definition njin_world3d.h:37
texture_handle normal
Normal map (xanh lá hướng lên như glTF). Không hợp lệ là không dùng.
Definition njin_world3d.h:27
Định danh của một texture, tạo bởi texture_load().
Definition _types.h:146
Vị trí, hướng và tỉ lệ của một vật 3D.
Definition njin_3d.h:504
Vector 2 chiều. Dùng cho vị trí, kích thước, độ dời.
Definition _types.h:39
Vector 3 chiều.
Definition _types.h:47
Cách dựng một mặt nước (water3d_create()).
Definition njin_world3d.h:344
i32 wave_count
Số sóng dùng, 0..njin::water3d_wave_max.
Definition njin_world3d.h:352
f32 foam_width
Bọt ở bờ trong độ sâu này, mét. 0 là không có.
Definition njin_world3d.h:358
f32 clarity
Nông hơn bấy nhiêu mét thì nhìn xuyên thấy đáy.
Definition njin_world3d.h:356
f32 crest_foam
Bọt trên đỉnh sóng cao, 0..1.
Definition njin_world3d.h:359
f32 specular
Độ mạnh của nắng lấp lánh.
Definition njin_world3d.h:361
f32 ripples
Gợn lăn tăn nhỏ trên mặt sóng, 0..1.
Definition njin_world3d.h:360
f32 shininess
Độ nhọn của nắng lấp lánh.
Definition njin_world3d.h:362
water3d_wave waves[water3d_wave_max]
Các con sóng. Mặc định ba sóng nhẹ cho mặt hồ có gió.
Definition njin_world3d.h:349
f32 depth_fade
Sâu bấy nhiêu mét thì gần như là deep_color.
Definition njin_world3d.h:355
terrain3d_handle terrain
Địa hình làm đáy và bờ.
Definition njin_world3d.h:363
f32 detail
Độ dày lưới, nhân với mặc định. Lớn thì sóng mịn hơn ở xa, tốn hơn.
Definition njin_world3d.h:365
rgba shallow_color
Màu chỗ nông.
Definition njin_world3d.h:353
vec2 size
Kích thước hồ theo x và z, mét; {0, 0} là biển.
Definition njin_world3d.h:347
f32 level
Độ cao mặt nước yên, mét.
Definition njin_world3d.h:345
rgba foam_color
Màu bọt.
Definition njin_world3d.h:357
rgba deep_color
Màu chỗ sâu.
Definition njin_world3d.h:354
vec2 center
Tâm hồ trên mặt xz.
Definition njin_world3d.h:346
Định danh của một mặt nước (hồ, biển), tạo bởi water3d_create().
Definition _types.h:236
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.
Definition njin_world3d.h:325
vec2 direction
Hướng sóng đi trên mặt xz (không cần độ dài 1).
Definition njin_world3d.h:326
f32 steepness
Độ nhọn, 0..1: biên độ là steepness * wavelength / (2 pi).
Definition njin_world3d.h:330
f32 wavelength
Khoảng cách hai đỉnh sóng, mét.
Definition njin_world3d.h:327
f32 speed
Nhân vào tốc độ tự nhiên của sóng.
Definition njin_world3d.h:331
Một chỗ có mái, cho weather3d_cover_set(): hình hộp thẳng trục.
Definition njin_world3d.h:466
vec3 size
Cỡ hộp, mét.
Definition njin_world3d.h:468
vec3 center
Tâm hộp.
Definition njin_world3d.h:467
Thời tiết: mây, sương, mưa, tuyết, gió, mặt đất ướt. Đặt vào njin::sky3d.
Definition njin_world3d.h:447
f32 snow
Tuyết rơi, 0..1.
Definition njin_world3d.h:452
f32 fog
Mật độ sương, như light3d::fog_density. 0 là không sương.
Definition njin_world3d.h:450
f32 wetness
Mặt đất ướt (tối và bóng hơn), 0..1.
Definition njin_world3d.h:454
f32 cloud_darkness
Mây tối (mây mưa), 0..1.
Definition njin_world3d.h:449
vec2 wind
Gió trên mặt xz, mét mỗi giây: mây trôi, cỏ nghiêng, mưa xiên.
Definition njin_world3d.h:453
f32 rain
Mưa, 0..1.
Definition njin_world3d.h:451
f32 clouds
Phần trời có mây, 0..1. 1 là u ám, che mặt trời.
Definition njin_world3d.h:448
bool cover_auto
Mưa và tuyết không rơi dưới mái: mỗi frame có mưa hay tuyết, engine vẽ độ sâu của mọi hình đục đổ bón...
Definition njin_world3d.h:460