mirror of
https://github.com/nzp-team/dquakeplus.git
synced 2024-11-23 04:12:04 +00:00
20 lines
897 B
C
20 lines
897 B
C
#include "pspmath.h"
|
|
|
|
void vfpu_sphere_to_cartesian(float az, float ze, float rad, float *x, float *y, float *z) {
|
|
__asm__ volatile (
|
|
"mtv %3, S000\n"
|
|
"mtv %4, S001\n"
|
|
"mtv %5, S002\n"
|
|
"vcst.s S003, VFPU_2_PI\n" // C000 = [az, ze, rad, 2/pi]
|
|
"vscl.p C000, C000, S003\n" // C000 = [az*2/pi, ze*2/pi, rad, 2/pi]
|
|
"vrot.p C010, S000, [s, c]\n" // C010 = [sin(az), cos(az), ?, ?]
|
|
"vrot.p C012, S001, [s, c]\n" // C010 = [sin(az), cos(az), sin(ze), cos(ze)]
|
|
"vmul.q C020, C010[y, 1, x, 0], C010[z, w, z, 0]\n" // C020 = [0, cos(az)*sin(ez), cos(ze), sin(az)*sin(ze)]
|
|
"vscl.t C020, C020, S002\n" // C020 = [0, r*cos(az)*sin(ez), r*cos(ze), r*sin(az)*sin(ze)]
|
|
//"sv.q C020, 0 + %0\n"
|
|
"sv.s S020, %0\n"
|
|
"sv.s S021, %1\n"
|
|
"sv.s S022, %2\n"
|
|
:"+m"(*x), "+m"(*y), "+m"(*z)
|
|
:"r"(az), "r"(ze), "r"(rad));
|
|
}
|