mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
add _scale_as feature
glm_vec_scale multiplies vector (all items) by a scalar result = vector * factor, new scale = old scale * factor now it is possible to scale a vector as specified factor result = unit(vector) * factor, new scale = factor
This commit is contained in:
@@ -94,6 +94,18 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_vec_scale(vec3 v, float s, vec3 dest);
|
glmc_vec_scale(vec3 v, float s, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_scale(vec4 v, float s, vec4 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec_scale_as(vec3 v, float s, vec3 dest);
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_scale_as(vec3 v, float s, vec3 dest);
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec_flipsign(vec3 v);
|
glmc_vec_flipsign(vec3 v);
|
||||||
@@ -102,10 +114,6 @@ CGLM_EXPORT
|
|||||||
void
|
void
|
||||||
glmc_vec4_flipsign(vec4 v);
|
glmc_vec4_flipsign(vec4 v);
|
||||||
|
|
||||||
CGLM_EXPORT
|
|
||||||
void
|
|
||||||
glmc_vec4_scale(vec4 v, float s, vec4 dest);
|
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec_angle(vec3 v1, vec3 v2)
|
glmc_vec_angle(vec3 v1, vec3 v2)
|
||||||
|
|||||||
@@ -249,7 +249,7 @@ glm_vec4_sub(vec4 v1, vec4 v2, vec4 dest) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief multiply vec3 vector with scalar
|
* @brief multiply/scale vec3 vector with scalar: result = v * s
|
||||||
*
|
*
|
||||||
* @param[in] v vector
|
* @param[in] v vector
|
||||||
* @param[in] s scalar
|
* @param[in] s scalar
|
||||||
@@ -263,6 +263,70 @@ glm_vec_scale(vec3 v, float s, vec3 dest) {
|
|||||||
dest[2] = v[2] * s;
|
dest[2] = v[2] * s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief multiply/scale vec4 vector with scalar: result = v * s
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_vec4_scale(vec4 v, float s, vec4 dest) {
|
||||||
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
|
_mm_store_ps(dest,
|
||||||
|
_mm_mul_ps(_mm_load_ps(v),
|
||||||
|
_mm_set1_ps(s)));
|
||||||
|
#else
|
||||||
|
dest[0] = v[0] * s;
|
||||||
|
dest[1] = v[1] * s;
|
||||||
|
dest[2] = v[2] * s;
|
||||||
|
dest[3] = v[3] * s;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief make vec3 vector scale as specified: result = unit(v) * s
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_vec_scale_as(vec3 v, float s, vec3 dest) {
|
||||||
|
float norm;
|
||||||
|
norm = glm_vec_norm(v);
|
||||||
|
|
||||||
|
if (norm == 0) {
|
||||||
|
glm_vec_copy(v, dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm_vec_scale(v, s / norm, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief make vec4 vector scale as specified: result = unit(v) * s
|
||||||
|
*
|
||||||
|
* @param[in] v vector
|
||||||
|
* @param[in] s scalar
|
||||||
|
* @param[out] dest destination vector
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_vec4_scale_as(vec4 v, float s, vec4 dest) {
|
||||||
|
float norm;
|
||||||
|
norm = glm_vec4_norm(v);
|
||||||
|
|
||||||
|
if (norm == 0) {
|
||||||
|
glm_vec4_copy(v, dest);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm_vec4_scale(v, s / norm, dest);
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief flip sign of all vec3 members
|
* @brief flip sign of all vec3 members
|
||||||
*
|
*
|
||||||
@@ -299,28 +363,6 @@ glm_vec4_flipsign(vec4 v) {
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* @brief multiply vec4 vector with scalar
|
|
||||||
*
|
|
||||||
* @param[in] v vector
|
|
||||||
* @param[in] s scalar
|
|
||||||
* @param[out] dest destination vector
|
|
||||||
*/
|
|
||||||
CGLM_INLINE
|
|
||||||
void
|
|
||||||
glm_vec4_scale(vec4 v, float s, vec4 dest) {
|
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
|
||||||
_mm_store_ps(dest,
|
|
||||||
_mm_mul_ps(_mm_load_ps(v),
|
|
||||||
_mm_set1_ps(s)));
|
|
||||||
#else
|
|
||||||
dest[0] = v[0] * s;
|
|
||||||
dest[1] = v[1] * s;
|
|
||||||
dest[2] = v[2] * s;
|
|
||||||
dest[3] = v[3] * s;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief normalize vec3 and store result in same vec
|
* @brief normalize vec3 and store result in same vec
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -121,6 +121,24 @@ glmc_vec_scale(vec3 v, float s, vec3 dest) {
|
|||||||
glm_vec_scale(v, s, dest);
|
glm_vec_scale(v, s, dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_scale(vec4 v, float s, vec4 dest) {
|
||||||
|
glm_vec4_scale(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec_scale_as(vec3 v, float s, vec3 dest) {
|
||||||
|
glm_vec_scale_as(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
|
CGLM_EXPORT
|
||||||
|
void
|
||||||
|
glmc_vec4_scale_as(vec3 v, float s, vec3 dest) {
|
||||||
|
glm_vec4_scale_as(v, s, dest);
|
||||||
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
void
|
void
|
||||||
glmc_vec_flipsign(vec3 v) {
|
glmc_vec_flipsign(vec3 v) {
|
||||||
@@ -133,12 +151,6 @@ glmc_vec4_flipsign(vec4 v) {
|
|||||||
glm_vec4_flipsign(v);
|
glm_vec4_flipsign(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
CGLM_EXPORT
|
|
||||||
void
|
|
||||||
glmc_vec4_scale(vec4 v, float s, vec4 dest) {
|
|
||||||
glm_vec4_scale(v, s, dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
CGLM_EXPORT
|
CGLM_EXPORT
|
||||||
float
|
float
|
||||||
glmc_vec_angle(vec3 v1, vec3 v2) {
|
glmc_vec_angle(vec3 v1, vec3 v2) {
|
||||||
|
|||||||
Reference in New Issue
Block a user