Tôi đang sử dụng công cụ 3D của riêng mình, bằng JavaScript và chỉ sử dụng bản vẽ canvas, không có WebGL. Đây là một bản sao Minecraft khác; Tôi yêu những chiếc hộp, đừng phán xét tôi.
Cho đến nay, mọi thứ hoạt động tuyệt vời, ngoại trừ một điều: trong 3D, khi một số đỉnh đi phía sau mặt phẳng cắt gần, hình chiếu của chúng trên màn hình xuất hiện kỳ lạ (giả sử các đỉnh khác được sử dụng để theo dõi một mặt phẳng ở phía trước).
Tôi đã thử cắt các điểm này nhưng sau đó tôi có thể thấy các bề mặt sử dụng các đỉnh này. Trong WebGL / OpenGL, card đồ họa sẽ xử lý các điểm này và mặt phẳng được hiển thị chính xác, nhưng tôi không có quyền truy cập vào phần cứng nên tôi phải tự viết mã này.
Tôi không chắc chắn nên làm gì với nó, hiện tại điều cuối cùng xuất hiện là đảo ngược hình chiếu của các điểm phía sau mặt phẳng cắt của người chơi, điều này có vẻ hợp lý vì tôi phải chiếu một điểm lên màn hình phía trước của đỉnh.
Đây là suy nghĩ của tôi:
Dưới đây là một số hình ảnh để minh họa những gì xảy ra:
Từ khoảng cách hộp màu xanh hoàn toàn tốt.
Khi một số đỉnh đi phía sau mặt phẳng cắt của người chơi, tôi thực hiện phép chiếu ngược, nhưng nó không đúng:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
Lưu ý rằng hộp màu xám phía sau được loại bỏ hoàn toàn vì tất cả các đỉnh được sử dụng để vẽ mặt của nó nằm phía sau trình phát.
Đây là những gì xảy ra khi nhìn lên hoặc xuống.
Tôi không biết phải làm gì với toán học đằng sau điều này, tôi hy vọng ai đó đã gặp phải vấn đề tương tự và có thể giúp tôi.
lineTo(x,y)
chức năng vẫn có thể được gọi, chỉ tôi không biết nó hoạt động như thế nào ... đó là một chiều kỳ quái, tôi đồng ý.