Je roule mon propre moteur 3D, en JavaScript, et n'utilise que du dessin sur toile, pas de WebGL. Ceci est un autre clone de Minecraft; J'adore les boîtes, ne me jugez pas.
Jusqu'à présent, tout fonctionne à merveille, sauf une chose: en 3D, lorsque certains sommets passent derrière le plan de détourage proche, leur projection sur l'écran est étrange (en supposant que d'autres sommets utilisés pour tracer un plan soient devant).
J'ai essayé d'écraser ces points mais je peux ensuite voir à travers les surfaces qui utilisent ces sommets. Dans WebGL / OpenGL, la carte graphique prend en charge ces points et le plan est rendu correctement, mais je n'ai pas accès au matériel, je dois donc le coder moi-même.
Je ne sais pas trop quoi en penser, actuellement la dernière chose qui m'est venue à l'esprit est d'inverser la projection des points derrière le plan de détourage proche du joueur, ce qui semble logique car je dois projeter un point sur un écran qui se trouve devant du sommet.
Voici mes pensées:
Voici quelques images pour illustrer ce qui se passe:
De loin, la boîte bleue se rend parfaitement bien.
Lorsque certains des sommets passent derrière le plan de détourage proche du lecteur, je fais une projection inverse, mais cela ne semble pas correct:
focalLength *= -1;
2d.x = x*focalLength/z;
2d.y = y*focalLength/z;
Notez que la case grise derrière est complètement supprimée car tous les sommets utilisés pour dessiner ses faces sont derrière le joueur.
C'est ce qui se produit lorsque vous regardez vers le haut ou vers le bas.
Je ne sais pas quoi faire des calculs derrière cela, j'espère que quelqu'un a déjà rencontré le même problème et peut m'aider.
lineTo(x,y)
fonction puisse toujours être appelée, seulement je ne sais pas comment elle se comporte ... c'est une dimension bizarre, je suis d'accord.