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
Thế giới ngoài trời 3D

Đị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.

Mô tả chi tiết

Đị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.

Thông tin về Enumeration Type

◆ terrain3d_brush_kind

Kiểu sửa của njin::terrain3d_brush.

Enumerator
terrain3d_raise 

Nâng lên strength mét ở tâm.

terrain3d_lower 

Hạ xuống strength mét ở tâm.

terrain3d_flatten 

Kéo về độ cao height, một phần strength (0..1) mỗi lần.

terrain3d_smooth 

Làm mượt, một phần strength (0..1) mỗi lần.

◆ 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.

Thông tin về hàm

◆ terrain3d_create()

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.

Các tham số
ctxContext của engine.
descCách dựng.
Giá trị trả về
Handle, hoặc handle không hợp lệ nếu desc sai (cảnh báo nói vì sao).

◆ terrain3d_destroy()

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ẽ.

Các tham số
ctxContext của engine.
handleĐịa hình. Handle không hợp lệ bị bỏ qua.

◆ draw_terrain3d()

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.

Các tham số
ctxContext của engine.
handleĐịa hình.

◆ terrain3d_height()

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.

Các tham số
ctxContext của engine.
handleĐịa hình.
xToạ độ x, mét.
zToạ độ z, mét.
Giá trị trả về
Độ cao, mét; 0 nếu handle không hợp lệ.

◆ terrain3d_normal()

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).

Các tham số
ctxContext của engine.
handleĐịa hình.
xToạ độ x, mét.
zToạ độ z, mét.
Giá trị trả về
Pháp tuyến; {0, 1, 0} nếu handle không hợp lệ.

◆ terrain3d_contains()

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.

Các tham số
ctxContext của engine.
handleĐịa hình.
xToạ độ x, mét.
zToạ độ z, mét.
Giá trị trả về
true nếu nằm trong hình vuông của nó.

◆ terrain3d_layer_weight()

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 đá).

Các tham số
ctxContext của engine.
handleĐịa hình.
xToạ độ x, mét.
zToạ độ z, mét.
layer0..njin::terrain3d_layer_max - 1.
Giá trị trả về
Trọng số; 0 nếu handle hay layer không hợp lệ.

◆ terrain3d_body()

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.

Các tham số
ctxContext của engine.
handleĐịa hình.
Giá trị trả về
Body, hoặc handle không hợp lệ nếu tắt collision.

◆ terrain3d_edit()

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).

Các tham số
ctxContext của engine.
handleĐịa hình.
brushNét sửa.

◆ terrain3d_paint()

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.

Các tham số
ctxContext của engine.
handleĐịa hình.
centerTâm (dùng x và z).
radiusBán kính, mét.
layerLớp.
strengthMỗi lần thêm bao nhiêu ở tâm, 0..1.

◆ grass3d_create()

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()).

Các tham số
ctxContext của engine.
descCách mọc.
Giá trị trả về
Handle, hoặc handle không hợp lệ nếu địa hình không hợp lệ.

◆ grass3d_destroy()

void njin::grass3d_destroy ( context & ctx,
grass3d_handle handle )

Hủy thảm cỏ.

Các tham số
ctxContext của engine.
handleThảm cỏ. Handle không hợp lệ bị bỏ qua.

◆ draw_grass3d()

void njin::draw_grass3d ( const context & ctx,
grass3d_handle handle )

Vẽ cỏ quanh camera của lần vẽ 3D đang mở.

Các tham số
ctxContext của engine.
handleThảm cỏ.

◆ grass3d_drawn()

i32 njin::grass3d_drawn ( const context & ctx,
grass3d_handle handle )

Số ngọn cỏ vẽ ở lần vẽ 3D gần nhất, để đo.

Các tham số
ctxContext của engine.
handleThảm cỏ.
Giá trị trả về
Số ngọn.

◆ wind3d_set()

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.

Các tham số
ctxContext của engine.
windVận tốc gió (x, z).

◆ wind3d_get()

vec2 njin::wind3d_get ( const context & ctx)

Gió đang dùng.

Các tham số
ctxContext của engine.
Giá trị trả về
Vận tốc gió (x, z), mét mỗi giây.

◆ scatter3d_create()

scatter3d_handle njin::scatter3d_create ( context & ctx,
const scatter3d_desc & desc )

Rải vật lên địa hình.

Các tham số
ctxContext của engine.
descCách rải.
Giá trị trả về
Handle, hoặc handle không hợp lệ nếu địa hình hay model không hợp lệ.

◆ scatter3d_destroy()

void njin::scatter3d_destroy ( context & ctx,
scatter3d_handle handle )

Hủy lớp vật rải.

Các tham số
ctxContext của engine.
handleLớp vật rải. Handle không hợp lệ bị bỏ qua.

◆ draw_scatter3d()

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()).

Các tham số
ctxContext của engine.
handleLớp vật rải.

◆ scatter3d_count()

i32 njin::scatter3d_count ( const context & ctx,
scatter3d_handle handle )

Số vật đã rải.

Các tham số
ctxContext của engine.
handleLớp vật rải.
Giá trị trả về
Số vật.

◆ scatter3d_transforms()

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.

Các tham số
ctxContext của engine.
handleLớp vật rải.
outMảng nhận, hoặc nullptr để chỉ đếm.
countSố phần tử của out.
Giá trị trả về
Số vật (có thể lớn hơn count: chỉ count vật đầu được ghi).

◆ water3d_create()

water3d_handle njin::water3d_create ( context & ctx,
const water3d_desc & desc )

Tạo mặt nước.

Các tham số
ctxContext của engine.
descCách dựng.
Giá trị trả về
Handle.

◆ water3d_destroy()

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.

Các tham số
ctxContext của engine.
handleMặt nước. Handle không hợp lệ bị bỏ qua.

◆ water3d_set()

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).

Các tham số
ctxContext của engine.
handleMặt nước.
descCách dựng mới.

◆ water3d_get()

water3d_desc njin::water3d_get ( const context & ctx,
water3d_handle handle )

Cách dựng hiện tại.

Các tham số
ctxContext của engine.
handleMặt nước.
Giá trị trả về
Cách dựng, hoặc mặc định nếu handle không hợp lệ.

◆ draw_water3d()

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.

Các tham số
ctxContext của engine.
handleMặt nước.

◆ water3d_height()

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.

Các tham số
ctxContext của engine.
handleMặt nước.
xToạ độ x, mét.
zToạ độ z, mét.
Giá trị trả về
Độ cao, mét; 0 nếu handle không hợp lệ.

◆ water3d_normal()

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.

Các tham số
ctxContext của engine.
handleMặt nước.
xToạ độ x, mét.
zToạ độ z, mét.
Giá trị trả về
Pháp tuyến (độ dài 1).

◆ water3d_time()

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.

Các tham số
ctxContext của engine.
Giá trị trả về
Thời gian của sóng.

◆ water3d_float()

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.

Các tham số
ctxContext của engine.
waterMặt nước.
bodyBody động.
buoyancyLực nổi và lực cản.

◆ water3d_unfloat()

void njin::water3d_unfloat ( context & ctx,
water3d_handle water,
body3d_handle body )

Thôi cho body nổi trên mặt nước.

Các tham số
ctxContext của engine.
waterMặt nước.
bodyBody.

◆ weather3d_cover_set()

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ỏ.

Các tham số
ctxContext của engine.
coversCác hộp, hoặc nullptr khi count là 0 (xóa hết).
countSố hộp.

◆ weather3d_cover_count()

i32 njin::weather3d_cover_count ( const context & ctx)

Số chỗ có mái đang đặt bằng weather3d_cover_set().

Các tham số
ctxContext của engine.
Giá trị trả về
Số hộp, 0..16.

◆ weather3d_preset()

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.

Các tham số
kindKiểu.
Giá trị trả về
Thời tiết.

◆ weather3d_lerp()

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.

Các tham số
aThời tiết ở t = 0.
bThời tiết ở t = 1.
tTiến độ, 0..1.
Giá trị trả về
Thời tiết ở giữa.

◆ sky3d_sun_direction()

vec3 njin::sky3d_sun_direction ( const sky3d & sky)

Hướng từ cảnh tới mặt trời (độ dài 1).

y âm là mặt trời đã lặn.

Các tham số
skyBầu trời.
Giá trị trả về
Hướng tới mặt trời.

◆ sky3d_light()

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).

Bóng đổ giữ như base.

Các tham số
skyBầu trời.
baseÁnh sáng gốc (cài đặt bóng đổ).
Giá trị trả về
Ánh sáng.

◆ sky3d_color()

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ẽ.

Cho nền 2D, màu xóa màn hình, hay biết trời đang sáng hay tối.

Các tham số
skyBầu trời.
directionHướng nhìn.
Giá trị trả về
Màu (alpha 1).

◆ draw_sky3d()

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ẽ.

Các tham số
ctxContext của engine.
skyBầu trời.