Pour simplifier, vous pouvez forcer au moins un point sur l'axe de rotation. Vous pouvez le faire facilement en ajoutant/soustrayant la même valeur à toutes les valeurs x, et la même valeur à toutes les valeurs y, des points dans le polygone. Il conservera la forme originale.
Le reste n'est pas si difficile. Choisissez un angle qui est assez petit, disons un ou deux degrés, et calculez les coordonnées des sommets du polygone qui tournent autour de l'axe. Ensuite, il suffit de joindre les points avec des fans de triangle et des bandes de triangle.
Pour faire pivoter un point autour d'un axe, il suffit de baser Pythagore. À 0 degré de rotation, vous avez les points à leurs coordonnées 2-d avec une valeur de 0 dans la troisième dimension. Supposons que les points sont en X et Y et que nous tournons autour de Y. La coordonnée X d'origine représente l'hypoténuse. A 1 degré de rotation, on a:
sin(1) = z/hypotenuse
cos(1) = x/hypotenuse
(en supposant que les fonctions trigonométriques sur la base diplômes)
pour faire tourner un point (x, y) par angle T autour de l'axe Y afin de produire un point 3D (x «y », z '):
y' = y
x' = x * cos(T)
z' = x * sin(T)
Ainsi, pour chaque point sur le bord du polygone vous produire un cercle de 360 points centrés sur l'axe de rotation.
maintenant faire une forme 3D comme ceci:
- créer un «ventilateur de triangle GL en utilisant votre point central et la première matrice de points ayant subi une rotation
- pour chaque rangée successive, créer une bande de triangle en utilisant les points de la matrice et les points contenus dans le tableau précédent
- finition en créant un autre ventilateur de triangle centré sur le point central et en utilisant les points dans la dernière rangée
One Il est important de noter que les types de fonctions trigonométriques que j'ai utilisés mesurent des angles en radians, et OpenGL utilise des degrés. Pour convertir les degrés en radians, la formule est:
degrees = radians/pi * 180
Merci pour la réponse! C'était simple et bien expliqué. – Mahm00d
Mon plaisir, @Flom – sje397