Para simplificar, puede forzar al menos un punto para que se apoye en el eje de rotación. Puede hacer esto fácilmente agregando/restando el mismo valor a todos los valores x, y el mismo valor a todos los valores y, de los puntos en el polígono. Retendrá la forma original.
El resto no es realmente tan difícil. Elija un ángulo que sea bastante pequeño, digamos uno o dos grados, y resuelva las coordenadas de los vértices del polígono a medida que gira alrededor del eje. Luego solo une los puntos con triángulos y triángulos.
Para rotar un punto alrededor de un eje es básico Pitágoras. A 0 grados de rotación, tienes los puntos en sus coordenadas 2-d con un valor de 0 en la tercera dimensión.
Supongamos que los puntos están en X e Y y estamos girando alrededor de Y. La coordenada 'X' original representa la hipotenusa. En 1 grado de rotación, tenemos:
sin(1) = z/hypotenuse
cos(1) = x/hypotenuse
(asumiendo funciones basadas en grado trigonométricas)
Para girar un punto (x, y) por ángulo T alrededor del eje Y para producir un punto 3d (x 'y', z '):
y' = y
x' = x * cos(T)
z' = x * sin(T)
Así que para cada punto en el borde de su polígono que producen un círculo de 360 puntos centrados en el eje de rotación.
Ahora hacer una forma 3D, así:
- crear un GL 'fan triángulo' mediante el uso de su punto central y la primera matriz de puntos rotados
- para cada matriz sucesiva, cree una tira triángulo usando los puntos de la matriz y los puntos de la matriz anterior
- acabado mediante la creación de otro ventilador triángulo centrada en el punto central y el uso de los puntos en la última matriz
Uno Lo que hay que notar es que, por lo general, los tipos de funciones trigonométricas que he usado miden ángulos en radianes, y OpenGL usa grados. Para convertir grados a radianes, la fórmula es:
degrees = radians/pi * 180
¡Gracias por la respuesta! Fue simple y bien explicado. – Mahm00d
Es un placer, @Flom – sje397