メインコンテンツまでスキップ

quatAdd: Quaternion Addition Operation

Component-wise Quaternion Addition​

The quatAdd function performs component-wise addition of quaternions. While not representing valid rotation composition (which requires quaternion multiplication), this operation creates useful blending effects for interpolation operations.

Mathematical Definition: For quaternions q1=(x1,y1,z1,w1)q_1 = (x_1, y_1, z_1, w_1) and q2=(x2,y2,z2,w2)q_2 = (x_2, y_2, z_2, w_2):

q1+q2=(x1+x2,y1+y2,z1+z2,w1+w2)q_1 + q_2 = (x_1 + x_2, y_1 + y_2, z_1 + z_2, w_1 + w_2)

This operation creates intermediate quaternion states that can be normalized for interpolation effects.

Spatial Quaternion Addition​

This example demonstrates quaternion addition applied across spatial coordinates, creating patterns through 4D vector arithmetic operations.

ライブエディター

const fragment = () => {
      const pos = uv.mul(4)
      const cell = pos.floor()
      const local = pos.fract().sub(0.5)

      const hash1 = cell.x.mul(12.9898).add(cell.y.mul(78.233)).sin().mul(43758.5).fract()
      const hash2 = cell.x.mul(39.346).add(cell.y.mul(11.135)).sin().mul(73156.8).fract()

      const q1 = vec4(hash1.mul(6.28).sin(), hash1.mul(3.14).cos(), hash2.mul(4.71).sin(), hash2.mul(1.57).cos())
      const q2 = vec4(iTime.add(hash1).mul(2).cos(), iTime.add(hash2).mul(1.5).sin(),
                      iTime.add(hash1).mul(0.8).cos(), iTime.add(hash2).mul(1.2).sin())

      const sum = quatAdd(q1, q2).normalize()
      const field = dot(sum, vec4(local.x, local.y, local.x.mul(local.y), 1))

      const oscillation = field.mul(8).sin().abs()
      const color = vec3(oscillation, oscillation.mul(0.7), oscillation.mul(0.4))

      return vec4(color, 1)

}
結果
Loading...