Sto rotolando il mio motore 3D, in JavaScript, e usando solo il disegno su tela, senza WebGL. Questo è un altro clone di Minecraft; Adoro le scatole, non giudicarmi.
Finora, tutto funziona meravigliosamente, tranne una cosa: in 3D, quando alcuni vertici passano dietro il piano di ritaglio vicino, la loro proiezione sullo schermo risulta strana (supponendo che altri vertici usati per tracciare un piano siano davanti).
Ho provato a ritagliare questi punti ma poi riesco a vedere attraverso le superfici che usano questi vertici. In WebGL / OpenGL la scheda grafica si occupa di questi punti e il piano è reso correttamente, ma non ho accesso all'hardware, quindi devo codificarlo da solo.
Non sono sicuro di cosa farne, attualmente l'ultima cosa che mi è venuta in mente è di invertire la proiezione dei punti dietro il piano di ritaglio vicino del giocatore, il che sembra logico poiché devo proiettare un punto su uno schermo che si trova di fronte del vertice.
Ecco i miei pensieri:
Ecco alcune immagini per illustrare cosa succede:
Da lontano il riquadro blu viene visualizzato perfettamente.
Quando alcuni dei vertici passano dietro il piano di ritaglio vicino del giocatore, faccio una proiezione inversa, ma non sembra giusto:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
Nota che la casella grigia dietro è stata completamente rimossa poiché tutti i vertici usati per disegnare le sue facce sono dietro il giocatore.
Questo è ciò che accade quando si guarda in alto o in basso.
Non so cosa pensare della matematica dietro questo, spero che qualcuno abbia già riscontrato lo stesso problema e possa aiutarmi.
lineTo(x,y)
funzione poteva ancora essere chiamata, solo che non so come si comporta ... è una dimensione bizzarra, sono d'accordo.