Saya memutar mesin 3D saya sendiri, dalam JavaScript, dan hanya menggunakan gambar kanvas, tanpa WebGL. Ini adalah klon Minecraft lainnya; Saya suka kotak, jangan menilai saya.
Sejauh ini, semuanya bekerja dengan luar biasa, kecuali satu hal: dalam 3D, ketika beberapa simpul berada di belakang pesawat kliping dekat, proyeksi mereka di layar menjadi aneh (dengan asumsi simpul lain yang digunakan untuk melacak pesawat ada di depan).
Saya mencoba memotong titik-titik ini tetapi kemudian saya bisa melihat melalui permukaan yang menggunakan simpul ini. Di WebGL / OpenGL kartu grafis menangani titik-titik ini dan pesawat diberikan dengan benar, tetapi saya tidak memiliki akses ke perangkat keras jadi saya harus kode ini sendiri.
Saya tidak begitu yakin apa yang harus saya lakukan, saat ini hal terakhir yang terlintas dalam pikiran saya adalah membalikkan proyeksi poin di belakang pesawat dekat kliping pemain, yang tampaknya logis karena saya harus memproyeksikan titik ke layar yang ada di depan. dari simpul.
Inilah pikiran saya:
Berikut adalah beberapa gambar untuk menggambarkan apa yang terjadi:
Dari kejauhan kotak biru tampak sempurna.
Ketika beberapa simpul berada di belakang bidang kliping dekat pemain, saya melakukan proyeksi terbalik, tetapi tidak terlihat benar:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
Perhatikan bahwa kotak abu-abu di belakang sepenuhnya dihapus karena semua simpul yang digunakan untuk menggambar wajahnya ada di belakang pemain.
Inilah yang terjadi ketika melihat ke atas atau ke bawah.
Saya tidak tahu bagaimana membuat matematika di balik ini, saya berharap seseorang telah mengalami masalah yang sama dan dapat membantu saya.
lineTo(x,y)
fungsinya masih bisa dipanggil, hanya saja saya tidak tahu bagaimana perilakunya ... itu dimensi yang aneh, saya setuju.