Branimir Karadžić 8 years ago
parent
commit
a517e191d4
2 changed files with 30 additions and 0 deletions
  1. 6 0
      include/bx/fpumath.h
  2. 24 0
      include/bx/inline/fpumath.inl

+ 6 - 0
include/bx/fpumath.h

@@ -256,6 +256,12 @@ namespace bx
 	///
 	void vec3TangentFrame(const float* _n, float* _t, float* _b, float _angle);
 
+	///
+	void vec3FromLatLong(float* _vec, float _u, float _v);
+
+	///
+	void vec3ToLatLong(float* _u, float* _v, const float* _vec);
+
 	///
 	void quatIdentity(float* _result);
 

+ 24 - 0
include/bx/inline/fpumath.inl

@@ -380,6 +380,30 @@ namespace bx
 		bx::vec3Cross(_b, _n, _t);
 	}
 
+	inline void vec3FromLatLong(float* _vec, float _u, float _v)
+	{
+		const float phi   = _u * bx::kPi2;
+		const float theta = _v * bx::kPi;
+
+		const float st = bx::fsin(theta);
+		const float sp = bx::fsin(phi);
+		const float ct = bx::fcos(theta);
+		const float cp = bx::fcos(phi);
+
+		_vec[0] = -st*sp;
+		_vec[1] = ct;
+		_vec[2] = -st*cp;
+	}
+
+	inline void vec3ToLatLong(float* _u, float* _v, const float* _vec)
+	{
+		const float phi   = bx::fatan2(_vec[0], _vec[2]);
+		const float theta = bx::facos(_vec[1]);
+
+		*_u = (bx::kPi + phi)*bx::kInvPi*0.5f;
+		*_v = theta*bx::kInvPi;
+	}
+
 	inline void quatIdentity(float* _result)
 	{
 		_result[0] = 0.0f;