View Full Version : How to rotate a surface so it has a given normal?

09-20-2009, 12:59 PM
Say I have a triangle with normal X. How do I rotate so it has a given normal Y?

09-21-2009, 08:46 AM
The rotation from X to Y is the same as the desired rotation of the triangle. X x Y = Z is some vector perpendicular to both of those, around which you want to rotate. Assuming the normals are, in fact, normalized, the magnitude Z is the sine of the angle between them. So, you essentially need to use the following call:
glRotatef(arcsin(Z.mag())*180/pi, Z.x, Z.y, Z.z);

Depending on where/how you choose to implement this transformation, there may be a better way that avoids the arcsin. You could go straight to the transformation matrix.

09-23-2009, 08:32 PM
http://stackoverflow.com/questions/11718...ctor-to-another (http://stackoverflow.com/questions/1171849/finding-quaternion-representing-the-rotation-from-one-vector-to-another)