Appearance
向量运算
length
计算向量的长度。
glsl
float length(float x)
float length(vec2 x)
float length(vec3 x)
float length(vec4 x)
参数说明
- x: 输入向量 返回值:向量的长度
使用示例
glsl
float len = length(vec2(3.0, 4.0)); // 返回5.0
normalize
将向量归一化(单位化)。
glsl
float normalize(float x)
vec2 normalize(vec2 x)
vec3 normalize(vec3 x)
vec4 normalize(vec4 x)
参数说明
- x: 输入向量 返回值:单位向量
使用示例
glsl
vec2 norm = normalize(vec2(3.0, 4.0)); // 返回(0.6, 0.8)
dot
计算两个向量的点积。
glsl
float dot(float x, float y)
float dot(vec2 x, vec2 y)
float dot(vec3 x, vec3 y)
float dot(vec4 x, vec4 y)
参数说明
- x: 第一个向量
- y: 第二个向量 返回值:两个向量的点积
使用示例
glsl
float result = dot(vec2(1.0, 2.0), vec2(3.0, 4.0)); // 返回11.0
cross
计算两个三维向量的叉积。
glsl
vec3 cross(vec3 x, vec3 y)
参数说明
- x: 第一个向量
- y: 第二个向量 返回值:两个向量的叉积
使用示例
glsl
vec3 result = cross(vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0)); // 返回(0.0, 0.0, 1.0)
reflect
计算反射向量。
glsl
float reflect(float I, float N)
vec2 reflect(vec2 I, vec2 N)
vec3 reflect(vec3 I, vec3 N)
vec4 reflect(vec4 I, vec4 N)
参数说明
- I: 入射向量
- N: 法线向量 返回值:反射向量
使用示例
glsl
vec3 reflected = reflect(vec3(1.0, -1.0, 0.0), vec3(0.0, 1.0, 0.0)); // 返回(1.0, 1.0, 0.0)
refract
计算折射向量。
glsl
float refract(float I, float N, float eta)
vec2 refract(vec2 I, vec2 N, float eta)
vec3 refract(vec3 I, vec3 N, float eta)
vec4 refract(vec4 I, vec4 N, float eta)
参数说明
- I: 入射向量
- N: 法线向量
- eta: 折射率比值(入射介质折射率/折射介质折射率) 返回值:折射向量
使用示例
glsl
vec3 refracted = refract(vec3(1.0, -1.0, 0.0), vec3(0.0, 1.0, 0.0), 1.5);
faceforward
根据入射向量和法线向量确定面朝向。
glsl
float faceforward(float N, float I, float Nref)
vec2 faceforward(vec2 N, vec2 I, vec2 Nref)
vec3 faceforward(vec3 N, vec3 I, vec3 Nref)
vec4 faceforward(vec4 N, vec4 I, vec4 Nref)
参数说明
- N: 法线向量
- I: 入射向量
- Nref: 参考法线向量 返回值:调整后的法线向量
使用示例
glsl
vec3 normal = faceforward(vec3(0.0, 1.0, 0.0), vec3(0.0, -1.0, 0.0), vec3(0.0, 1.0, 0.0));
distance
计算两个点之间的距离。
glsl
float distance(float p0, float p1)
float distance(vec2 p0, vec2 p1)
float distance(vec3 p0, vec3 p1)
float distance(vec4 p0, vec4 p1)
参数说明
- p0: 第一个点
- p1: 第二个点 返回值:两点之间的距离
使用示例
glsl
float dist = distance(vec2(0.0, 0.0), vec2(3.0, 4.0)); // 返回5.0