Hola,
Tengo un vector dirección (vDir) al que le he aplicado unos cambios. Tengo un punto de origen (vStart) y un punto final (vEnd).
Después de calcular unos cambios para vDir, vEnd lo calculo así
vEnd.x = vStart.x + Radio * vDir.x;
vEnd.y = vStart.y + Radio * vDir.y;
vEnd.z = vStart.z + Radio * vDir.z;
Ahora lo que quería conseguir es rotar vDir sobre el eje Y unos determinador grados y volver a calcular vEnd.
La rotación sobre el eje Y la hago así:
vDir.x = (vDir.z * cos(ang_rad)) - (vDir.x * sin(ang_rad));//y
vDir.z = (vDir.x * cos(ang_rad)) + (vDir.z * sin(ang_rad));
El caso es que así parece que las cosas no funcionan, sin embargo si hago esto funciona perfectamente:
vEnd.x = Radio * vDir.x;
vEnd.y = Radio * vDir.y;
vEnd.z = Radio * vDir.z;
glPushMatrix();
glTranslatef(vStart.x, vStart..y, vStart..z);
glRotatef(angle, 0.0, 1.0, 0.0);
glBegin(GL_LINES);
glVertex3f(0, 0, 0);
glVertex3f(vEnd.x, vEnd.y, vEnd.z);
glEnd();
glPopMatrix();
Aquí realmente roto el punto final no el vector pero rotando vEnd directamente por código tampoco lo consigo.
Alguien me puede echar una mano.
Gracias y un saludo
Suponiendo que las ecuaciones de rotación del eje Y que tienes están bien, el error podrías tenerlo en que estás usando el valor modificado de vDir.x para calcular vDir.z en vez del vDir.x original.
Haciendo algo parecido a esto podría solucionarse si es este el problema:
VECTOR vTemporal = vDir;
vTemporal.x = (vDir.z * cos(ang_rad)) - (vDir.x * sin(ang_rad));//y
vTemporal.z = (vDir.x * cos(ang_rad)) + (vDir.z * sin(ang_rad));
vDir = vTemporal;
Muchas gracias, creo que ahora funciona.