float3 MUST_USE_RESULT Quat::Transform(const float3 &vec) const { assume2(this->IsNormalized(), *this, this->LengthSq()); #if defined(MATH_AUTOMATIC_SSE) && defined(MATH_SSE) return float4(quat_transform_vec4(q, load_vec3(vec.ptr(), 0.f))).xyz(); #else ///\todo Optimize/benchmark the scalar path not to generate a matrix! float3x3 mat = this->ToFloat3x3(); return mat * vec; #endif }
void Quat::SetFromAxisAngle(const float3 &axis, float angle) { #if defined(MATH_AUTOMATIC_SSE) && defined(MATH_SSE) SetFromAxisAngle(load_vec3(axis.ptr(), 0.f), angle); #else assume1(axis.IsNormalized(), axis); assume1(MATH_NS::IsFinite(angle), angle); float sinz, cosz; SinCos(angle*0.5f, sinz, cosz); x = axis.x * sinz; y = axis.y * sinz; z = axis.z * sinz; w = cosz; #endif }
//----------------------------------------------------------------------------- CE_EXPORT int32_t luaopen_libcrown(lua_State* L) { LuaEnvironment env(L); load_vec2(env); load_vec3(env); load_mat4(env); load_quat(env); load_math(env); load_mouse(env); load_keyboard(env); load_accelerometer(env); load_device(env); load_window(env); return 1; }