J'ai récemment conçu et réalisé une routine de projection 3d en assembleur 6502 qui est capable d'effectuer la projection d'un point 3D sur un écran 2D en moins de 500 cycles processeur (ce qui en fait un outils idéal pour le rendu de scènes 3D en temps-réel).
Le principe consiste à effectuer la projection en utilisant la trigonométrie plutôt que l'algèbre linéaire.
Ainsi, pour un point 3D aux coordonnées [pX, pY, pZ] et une caméra à la position [cX, cY, cZ] tournée d'un angle caZ autour de son axe Z et caX autour de son axe X, les coordonnées écran sont calculées en utilisant les coordonnées angulaires du point relativement à la caméra par l'algorithme suivant:
Code : Tout sélectionner
AngleHorizontal = atan2((pY-cY),(pX-cY)) - caZ
DistanceHorizontale = sqrt ((pY-cY)**2+(pX-cX)**2)
AngleVertical = atan2((pY-cY),DistanceHorizontale ) - caX
J'ai utilisé l'algorithme trouvé sur codebase64.
la distance horizontale est calculée par une approximation biplanaire le norme euclidienne dont j'explique le principe d'élaboration ici.
Le code source de la routine, des outils pour le calcul des abaques, des fragments de documentation, et des exemples d'utilisation sont disponibles sur le dépôt du projet glOric.
La routine est disponible en deux versions : Alors n'hésitez pas à l'utiliser dans vos réalisations en suivant ce rapide guide d'utilisation.
La seule chose que je vous demande, si vous me faites l'honneur d'utiliser cette routine, c'est d'ajouter mon nom dans les crédits de vos programmes:
Jean-Baptiste PERIN