сферические координаты задаются не по ISO (фи[0 до 360] тета [-90 до 90]), а в другом представлении (фи[0-180] тета [-180 до 180]).
Точно не перепутаны местами углы? Так-то диапазон для одно из них (долгота) должен быть 360, для другого (широта) 180.
Если же поменять местами, то есть в одном случае долгота от 0 до 360 и широта от -90 до 90, а в другом долгота от -180 до 180 и широта от 0 до 180, то необходимо добавить преобразование
phi1 = phi < 180 ? phi : phi - 360;
theta1 = theta + 90;
где (phi,theta) в ISO, а (phi1,theta1) в формате пользователя. Обратное преобразование выписывается аналогично:
phi = phi1 < 0 ? phi1 + 360 : phi1;
theta = theta1 - 90;
Скажем, нужно Вам, чтобы SphericalToCartesian интерпретировала входные phi,theta в пользовательском формате. Вы пишите
float r = sphericalCoordinates.x;
float theta = sphericalCoordinates.y;
float phi = sphericalCoordinates.z;
phi = phi < 0 ? phi + 360 : phi; // впрочем, конкретно эта строка не влияет на результат
theta = theta - 90;
Аналогично для другого преобразования.