Tôi phát triển công cụ trò chơi của riêng mình cho vui (nhưng không sinh lãi). Tôi đã kết xuất trong một luồng và cập nhật biểu đồ cảnh của tôi (vận tốc, v.v.) trong một luồng khác. Khi đến lúc kết xuất, luồng kết xuất sẽ thêm các nút hiển thị vào bộ đệm tuyến tính mới và duyệt qua chúng.
Chi tiết hơn, đồ thị cảnh của tôi là bộ đệm ba. Mỗi nút trong biểu đồ cảnh của tôi có ba bản sao ma trận biến đổi tương đối và tuyệt đối của nó (4 x 4). Tại bất kỳ thời điểm nào, một bản sao được ghi bởi luồng biểu đồ cảnh, một bản sao được đọc bởi trình kết xuất và một bản thứ ba tồn tại để người đọc hoặc người viết có thể chuyển sang bản tiếp theo mà không phải chờ người khác. Điều này ngăn việc ghi vào một cái gì đó trong khi nó được kết xuất và hiển thị biểu đồ cảnh được cập nhật một nửa. Bằng cách nào đó tôi cũng đã có một bản sao thứ tư của mỗi ma trận để người dùng làm việc để không xung đột với luồng cập nhật. Điều này dường như thực hiện tốt bằng cách tránh phải đồng bộ hóa mọi lúc.
Tuy nhiên, đây là một mớ hỗn độn.
Đây là những mục tiêu cuối cùng của tôi cho hệ thống:
- Kết xuất và cập nhật biểu đồ cảnh ở trong các chủ đề riêng biệt.
- Giảm thiểu bao nhiêu chủ đề này phải chờ đợi nhau.
- Đừng kết xuất một cảnh đã được cập nhật nửa chừng bởi luồng cập nhật. Điều này đặc biệt đáng chú ý nếu máy ảnh di chuyển nhanh và đôi khi nó được hiển thị trước hoặc sau khi cập nhật.
- Giảm sử dụng bộ nhớ. Tôi có quá nhiều ma trận trên mỗi nút. Tôi cũng đang xem xét việc chuyển sang các vectơ cho vị trí / góc quay / tỷ lệ do tăng trôi điểm trôi nổi với ma trận.
- Khả năng xử lý hàng chục ngàn Nút. Hệ thống hiện tại làm điều này hợp lý tốt.
Tôi cũng hy vọng sẽ kết hợp Bullet (công cụ vật lý) và kết nối mạng trong tương lai, không ai trong số đó tôi đã suy nghĩ nhiều.
Một số cách tiếp cận để thực hiện một đồ thị cảnh tốt hơn là gì?