Question

Je veux projeter mon Polygon le long d'un vecteur à un plan dans l'espace 3D. J'utiliser de préférence une seule matrice de transformation pour le faire, mais je ne sais pas comment construire une matrice de ce genre.

Vu

  • les paramètres de l'avion (axe de + by + cz + d),
  • le monde coordonnées de mon Polygon. Comme indiqué dans le le titre, tous les sommets de mon mensonge polygone dans un autre plan.
  • le vecteur de direction le long de laquelle projeter mon polygone (actuellement le vecteur normal de l'avion du polygone)

objectif matrice de transformation 4x4 -a qui réalise la projection requise,

ou

  • un aperçu sur la façon de construire moi-même

UPDATE

Merci pour la réponse, cela fonctionne comme prévu.

Un mot d'avertissement aux personnes qui ont trouvé ceci: Si le plan de la normale de projection est parallèle au vecteur de projection, le Dénominateur D deviendra (presque) 0, afin d'éviter des choses étranges de se produire, une sorte de manipulation pour ce cas particulier est nécessaire. Je l'ai résolu en vérifiant si D <1E-5, et si oui, juste traduire mon polygone le long vecteur d'extrusion de hte.

Était-ce utile?

La solution

Supposons que l'un des sommets du polygone est (x0, y0, z0), et le vecteur de direction est (dx,dy,dz).

Un point sur la ligne de projection est la suivante:. (x,y,z) = (x0 + t*dx, y0 + t*dy, z0 + t*dz)

Vous voulez trouver l'intersection de cette ligne avec le plan, donc le brancher dans l'équation du plan ax+by+cz+d = 0 et résoudre T:

t = (-a*x0 - b*y0 - c*z0 - d) / (a*dx + b*dy + c*dz)

Et puis vous avez votre sommet cible. x = x0+dx*t, etc

Etant donné que ceci est une transformation affine, elle peut être réalisée par une matrice de 4x4. Vous devez être en mesure de déterminer les éléments de matrice en écrivant les trois équations pour x, y, z en fonction de x0, y0, z0 et en prenant les coefficients.

Par exemple, pour x:

x = x0 - (a*dx*x0 + b*dx*y0 + c*dx*z0 + d*dx) / D
x = (1 - a*dx/D)*x0 - (b*dx/D)*y0 - (c*dx/D)*z0 - d*dx/D

D = a*dx + b*dy + c*dz est le dénominateur d'en haut. travail y et z de la même.

matrice de résultats:

1-a*dx/D    -b*dx/D    -c*dx/D   -d*dx/D
 -a*dy/D   1-b*dy/D    -c*dy/D   -d*dy/D
 -a*dz/D    -b*dz/D   1-c*dz/D   -d*dz/D
    0          0          0         1

(Remarque: Direct3D cette matrice doit être transposée, car il utilise des vecteurs de ligne au lieu de vecteurs de colonne)

.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top