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
Camera

Camera đang dùng và đổi tọa độ giữa thế giới và màn hình. Tiếp...

Classes

struct  njin::camera_follow
 Cho camera bám theo một entity: mượt, có vùng chết, nhìn trước theo hướng chạy, và không bao giờ lộ ra ngoài khung level. Tiếp...

Các hàm

entt::entity njin::camera_spawn (context &ctx, f32 zoom=1.0f, vec2 pos={})
 Tạo một entity camera đang dùng (transform, njin::camera_2d, njin::camera_on) nhìn vào pos, với offset ở giữa màn hình.
rect njin::level_bounds (const context &ctx, level_handle level)
 Khung của một level trong thế giới, dùng cho camera_follow::bounds.
vec2 njin::camera_clamp (const context &ctx, vec2 pos, const camera_2d &cam, rect bounds)
 Giới hạn một vị trí camera để khung nhìn nằm trong bounds.
camera_view njin::camera_active (const context &ctx)
 Trả về góc nhìn dùng cho frame này.
vec2 njin::w2scr (const context &ctx, vec2 pos)
 Đổi một điểm từ thế giới sang pixel màn hình, qua camera_active().
vec2 njin::scr2w (const context &ctx, vec2 pos)
 Đổi một điểm từ pixel màn hình sang thế giới, qua camera_active().
rect njin::camera_bounds (const context &ctx)
 Vùng thế giới đang hiện trên màn hình.
void njin::camera_set_post_shader (context &ctx, shader_handle shader)
 Áp một shader hậu kỳ lên toàn bộ thế giới đi qua camera.

Mô tả chi tiết

Camera đang dùng và đổi tọa độ giữa thế giới và màn hình.

Thông tin về hàm

◆ camera_spawn()

entt::entity njin::camera_spawn ( context & ctx,
f32 zoom = 1.0f,
vec2 pos = {} )

Tạo một entity camera đang dùng (transform, njin::camera_2d, njin::camera_on) nhìn vào pos, với offset ở giữa màn hình.

Các tham số
ctxContext của engine.
zoomĐộ phóng. 2 là mọi thứ to gấp đôi.
posĐiểm nhìn ban đầu trong thế giới.
Giá trị trả về
Entity camera. Thêm njin::camera_follow để nó bám theo nhân vật.

◆ level_bounds()

rect njin::level_bounds ( const context & ctx,
level_handle level )

Khung của một level trong thế giới, dùng cho camera_follow::bounds.

Các tham số
ctxContext của engine.
levelLevel đã nạp.
Giá trị trả về
{level_origin, level_size}, hoặc hình rỗng nếu handle không hợp lệ.

◆ camera_clamp()

vec2 njin::camera_clamp ( const context & ctx,
vec2 pos,
const camera_2d & cam,
rect bounds )

Giới hạn một vị trí camera để khung nhìn nằm trong bounds.

Các tham số
ctxContext của engine (để biết cỡ màn hình).
posVị trí camera (transform.pos).
camCamera.
boundsVùng thế giới. Kích thước 0 là không giới hạn.
Giá trị trả về
Vị trí đã giới hạn.

◆ camera_active()

camera_view njin::camera_active ( const context & ctx)

Trả về góc nhìn dùng cho frame này.

Đó là entity có camera_on, camera_2d và transform (xem _comps.h), hoặc góc nhìn đồng nhất (thế giới trùng với pixel màn hình) nếu không có entity nào. Được đọc trực tiếp từ registry nên thay đổi có hiệu lực ngay.

Các tham số
ctxContext của engine.
Giá trị trả về
Góc nhìn đang dùng.

◆ w2scr()

vec2 njin::w2scr ( const context & ctx,
vec2 pos )

Đổi một điểm từ thế giới sang pixel màn hình, qua camera_active().

Các tham số
ctxContext của engine.
posĐiểm trong thế giới.
Giá trị trả về
Vị trí tương ứng trên màn hình.

◆ scr2w()

vec2 njin::scr2w ( const context & ctx,
vec2 pos )

Đổi một điểm từ pixel màn hình sang thế giới, qua camera_active().

Thường dùng để đổi vị trí chuột, từ mouse_pos(), thành vị trí trong thế giới.

Các tham số
ctxContext của engine.
posĐiểm trên màn hình (pixel).
Giá trị trả về
Vị trí tương ứng trong thế giới.

◆ camera_bounds()

rect njin::camera_bounds ( const context & ctx)

Vùng thế giới đang hiện trên màn hình.

Khi camera xoay, đây là hình chữ nhật thẳng trục bao quanh vùng nhìn thấy. Dùng để bỏ qua việc vẽ những thứ nằm ngoài màn hình.

Các tham số
ctxContext của engine.
Giá trị trả về
Hình chữ nhật trong thế giới.

◆ camera_set_post_shader()

void njin::camera_set_post_shader ( context & ctx,
shader_handle shader )

Áp một shader hậu kỳ lên toàn bộ thế giới đi qua camera.

Khi bật, mọi thứ vẽ trong phase_pre_render và phase_render (kể cả sprite và tilemap) được vẽ vào một ảnh ngoài màn hình, rồi vẽ ra màn hình qua shader này. UI vẽ trong phase_post_render không bị ảnh hưởng. Đặt uniform cho shader như bình thường bằng các hàm shader_set_*().

Các tham số
ctxContext của engine.
shaderShader hậu kỳ. Handle id 0 để tắt.