I need a function that can take a vector as an input and provide a vector that is at a 90-degree angle to the provided vector. I understand that in 3D there is an infinite amount of vectors that could be produced from this calculation, but I only require 1. I have been using GLM and have tried using its built in vector rotation functions but to no avail. I would like to keep the solution compatible with GLM as I wish to have everything standardized.
Here is a basic visualization of what I need.
Edit The function's purpose is to pass a direction vector into a function, radius, and an angle and it will create a point around the origin at x angle in space. The reason for this is so I can loop through and create a point cloud in 3D space and then join them together to make shapes such as cylinders (see photo)
Solution Code
glm::vec3 CreateAngledPoint(glm::vec3 rotation_point, float radius, float angle, glm::vec3 normal)
{
// Normalize the normal (axis to rotate on)
normal = glm::normalize(normal);
// Create a vector that will be used for the dot product
glm::vec3 to_cross = glm::normalize(glm::vec3(0.0f,1.0f,0.0f));
// Make sure that the normal and cross vector are not the same, if they are change the cross vector
if (to_cross == normal) to_cross = glm::normalize(glm::vec3(0.0f, 0.0f, 1.0f));
// Get the cross product
glm::vec3 to_return = glm::normalize(glm::cross(normal,to_cross));
// Rotate point around the axis
to_return = glm::rotate(to_return, angle* RAD_TO_DEG, normal);
// Scale the point up from the origin
to_return *= radius;
// Apply it to the point in space we are rotating around
return rotation_point + to_return;
}