mirror of
https://github.com/recp/cglm.git
synced 2025-10-04 17:09:40 +00:00
reflect
This commit is contained in:
@@ -55,7 +55,7 @@
|
|||||||
CGLM_INLINE void glm_vec2_clamp(vec2 v, float minVal, float maxVal)
|
CGLM_INLINE void glm_vec2_clamp(vec2 v, float minVal, float maxVal)
|
||||||
CGLM_INLINE void glm_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest)
|
CGLM_INLINE void glm_vec2_lerp(vec2 from, vec2 to, float t, vec2 dest)
|
||||||
CGLM_INLINE void glm_vec2_make(float * restrict src, vec2 dest)
|
CGLM_INLINE void glm_vec2_make(float * restrict src, vec2 dest)
|
||||||
|
CGLM_INLINE void glm_vec2_reflect(vec2 I, vec2 N, vec2 dest)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef cglm_vec2_h
|
#ifndef cglm_vec2_h
|
||||||
@@ -712,4 +712,19 @@ glm_vec2_make(const float * __restrict src, vec2 dest) {
|
|||||||
dest[0] = src[0]; dest[1] = src[1];
|
dest[0] = src[0]; dest[1] = src[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief reflection vector using an incident ray and a surface normal
|
||||||
|
*
|
||||||
|
* @param[in] I incident vector
|
||||||
|
* @param[in] N normalized normal vector
|
||||||
|
* @param[out] dest destination vector for the reflection result
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_vec2_reflect(vec2 I, vec2 N, vec2 dest) {
|
||||||
|
vec2 temp;
|
||||||
|
glm_vec2_scale(N, 2.0f * glm_vec2_dot(I, N), temp);
|
||||||
|
glm_vec2_sub(I, temp, dest);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* cglm_vec2_h */
|
#endif /* cglm_vec2_h */
|
||||||
|
@@ -80,6 +80,7 @@
|
|||||||
CGLM_INLINE void glm_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest);
|
CGLM_INLINE void glm_vec3_smoothinterpc(vec3 from, vec3 to, float t, vec3 dest);
|
||||||
CGLM_INLINE void glm_vec3_swizzle(vec3 v, int mask, vec3 dest);
|
CGLM_INLINE void glm_vec3_swizzle(vec3 v, int mask, vec3 dest);
|
||||||
CGLM_INLINE void glm_vec3_make(float * restrict src, vec3 dest);
|
CGLM_INLINE void glm_vec3_make(float * restrict src, vec3 dest);
|
||||||
|
CGLM_INLINE void glm_vec3_reflect(vec3 I, vec3 N, vec3 dest);
|
||||||
|
|
||||||
Convenient:
|
Convenient:
|
||||||
CGLM_INLINE void glm_cross(vec3 a, vec3 b, vec3 d);
|
CGLM_INLINE void glm_cross(vec3 a, vec3 b, vec3 d);
|
||||||
@@ -1202,4 +1203,19 @@ glm_vec3_make(const float * __restrict src, vec3 dest) {
|
|||||||
dest[2] = src[2];
|
dest[2] = src[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief reflection vector using an incident ray and a surface normal
|
||||||
|
*
|
||||||
|
* @param[in] I incident vector
|
||||||
|
* @param[in] N normalized normal vector
|
||||||
|
* @param[out] dest reflection result
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_vec3_reflect(vec3 I, vec3 N, vec3 dest) {
|
||||||
|
vec3 temp;
|
||||||
|
glm_vec3_scale(N, 2.0f * glm_vec3_dot(I, N), temp);
|
||||||
|
glm_vec3_sub(I, temp, dest);
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* cglm_vec3_h */
|
#endif /* cglm_vec3_h */
|
||||||
|
@@ -65,6 +65,7 @@
|
|||||||
CGLM_INLINE void glm_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest);
|
CGLM_INLINE void glm_vec4_smoothinterpc(vec4 from, vec4 to, float t, vec4 dest);
|
||||||
CGLM_INLINE void glm_vec4_swizzle(vec4 v, int mask, vec4 dest);
|
CGLM_INLINE void glm_vec4_swizzle(vec4 v, int mask, vec4 dest);
|
||||||
CGLM_INLINE void glm_vec4_make(float * restrict src, vec4 dest);
|
CGLM_INLINE void glm_vec4_make(float * restrict src, vec4 dest);
|
||||||
|
CGLM_INLINE void glm_vec4_reflect(vec4 I, vec4 N, vec4 dest);
|
||||||
|
|
||||||
DEPRECATED:
|
DEPRECATED:
|
||||||
glm_vec4_dup
|
glm_vec4_dup
|
||||||
@@ -1304,4 +1305,23 @@ glm_vec4_make(const float * __restrict src, vec4 dest) {
|
|||||||
dest[2] = src[2]; dest[3] = src[3];
|
dest[2] = src[2]; dest[3] = src[3];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* @brief reflection vector using an incident ray and a surface normal
|
||||||
|
*
|
||||||
|
* @param[in] I incident vector
|
||||||
|
* @param[in] N normalized normal vector
|
||||||
|
* @param[out] dest destination vector for the reflection result
|
||||||
|
*/
|
||||||
|
CGLM_INLINE
|
||||||
|
void
|
||||||
|
glm_vec4_reflect(vec4 I, vec4 N, vec4 dest) {
|
||||||
|
vec4 temp;
|
||||||
|
|
||||||
|
/* TODO: direct simd touch */
|
||||||
|
glm_vec4_scale(N, 2.0f * glm_vec4_dot(I, N), temp);
|
||||||
|
glm_vec4_sub(I, temp, dest);
|
||||||
|
|
||||||
|
dest[3] = I[3];
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* cglm_vec4_h */
|
#endif /* cglm_vec4_h */
|
||||||
|
Reference in New Issue
Block a user