Skip to content

向量运算 ​

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