nói dối e blog

Thực Thể (Entity) Trong Kiến Trúc ECS

Tôi cho rằng mô hình ECS (Entity-Component-System) ra đời nhằm giải quyết những hạn chế tồn tại trong các mô hình hướng đối tượng truyền thống. Trong các hệ thống truyền thống, khi số lượng đối tượng lớn và các thuộc tính của chúng trở nên phức tạp, việc xử lý logic cho từng khía cạnh (aspect) của đối tượng đòi hỏi phải lọc ra các tập hợp con phù hợp từ tập hợp lớn các đối tượng. Điều này vừa làm giảm hiệu năng, vừa khiến các thuộc tính không liên quan trở nên phụ thuộc chặt chẽ vào nhau.

Tuyển Dụng Dự Án 3D Engine

Dự án 3D Engine của chúng tôi đã đi được 10 tháng kể từ đầu tháng 1 năm 2018. Mặc dù tiến độ chậm hơn so với kế hoạch ban đầu một chút, nhưng vẫn nằm trong ngưỡng chấp nhận được. Đến nay, chúng tôi đã hoàn thành cơ bản khung render thời gian chạy (dựa trên mô hình ECS), tích hợp thành công engine vật lý Bullet, phát triển hệ thống tệp ảo dựa trên mạng cho phép chạy ứng dụng từ xa mà không cần phụ thuộc vào tài nguyên hay mã nguồn cục bộ. Đặc biệt, nhóm cũng đã xây dựng thành công công cụ gỡ lỗi tương tác từ xa bằng Lua giúp tăng đáng kể hiệu suất lập trình Lua.

Vấn Đề Độ Chính Xác Khi Xác Định Điểm Nằm Trong Tam Giác

Một đồng nghiệp vừa phản ánh gặp vấn đề về độ chính xác khi sử dụng thư viện recastnavigation để kiểm tra một điểm có nằm trong tam giác hay không. Đặc biệt, hàm dtClosestHeightPointTriangle gặp sai số rất lớn trong quá trình kiểm tra.

Trường hợp cụ thể
  • Tọa độ 3 đỉnh tam giác:
    • A: {261.137939, 8.13000488}
    • B: {73.6379318, 8.13000488}
    • C: {76.9379349, 10.2300053}
  • Điểm kiểm tra P: {74.4069519, 8.6093819}
    Theo lý thuyết, P nằm trong tam giác nhưng hàm trả về kết quả sai.
Phân tích nguyên nhân

Khi kiểm tra mã nguồn, vấn đề nằm ở phép tính dot00 * dot11 - dot01 * dot01. Đây là phép nhân các giá trị đã được bình phương, dẫn đến sai số lớn khi làm việc với kiểu float (23 bit độ chính xác). Ví dụ:

Nguyên Lý Hoạt Động Của Lua GC

Luận lý của Lua GC
Lần cuối cùng tôi viết về Lua GC trên blog là vào năm 2011, thời điểm Lua 5.2 chưa chính thức ra mắt. Tôi luôn cho rằng việc nghiên cứu kỹ mã nguồn mở chất lượng cao là hoạt động rất đáng đầu tư, tuy nhiên việc ghi chép lại quá trình nghiên cứu đó lại mang ít giá trị thực tế. Việc thay người khác nhai lại thông tin vừa tốn công mà khó làm vừa lòng tất cả, bởi mỗi người có nền tảng kỹ thuật khác nhau. Nếu viết chi tiết quá sẽ phí thời gian đọc, viết sơ lược lại khiến người đọc khó nắm được mạch. Việc đọc từng dòng mã vốn đã là công việc nặng nhọc, chỉ cần tập trung thì ai cũng làm được. Muốn tiết kiệm thời gian nhờ người khác giải thích thay, thường là không khả thi. Vì vậy cuốn sách “Chiêm ngưỡng mã nguồn Lua” của tôi đến nay vẫn còn nằm trên giấy.

无标题

Hỗ trợ đa luồng trong Lua

Hỗ trợ đa luồng trong Lua

Lua hỗ trợ đa luồng như thế nào?
Một máy ảo Lua đơn lẻ chỉ có thể chạy trên duy nhất một luồng (thread). Nếu muốn sử dụng Lua để xử lý song song trong cùng một tiến trình, bạn bắt buộc phải triển khai nhiều máy ảo Lua độc lập cho từng luồng riêng biệt.
Lưu ý: Trong môi trường ứng dụng đa luồng quy mô nhỏ, việc sử dụng cơ chế khóa (lock) cũng khả thi. Bạn hoàn toàn có thể tùy biến các hàm lua_lock(L)lua_unlock(L) để gọi hàm khóa của hệ điều hành khi biên dịch.

Cải Tiến Thống Kê Mạng Cho Skynet

Trong giai đoạn hiện tại, mục tiêu chính của skynet là nâng cao tính minh bạch của các thông tin nội bộ trong quá trình vận hành. Việc cung cấp thêm dữ liệu thống kê thời gian chạy không chỉ hỗ trợ công tác vận hành hệ thống mà còn định hướng tối ưu hiệu năng một cách rõ ràng hơn.

Gần đây, tôi đã bổ sung lệnh netstat vào giao diện debug console, đồng thời phát triển API socket.netstat tương ứng để truy xuất dữ liệu này. Lệnh này cho phép liệt kê toàn bộ kết nối mạng (socket) do skynet quản lý, bao gồm các thông tin chi tiết như:

0%