mx_rotate3d
mx_rotate3d
将一个 vec3 绕给定三维轴按角度(度)旋转;内部实现罗德里格斯公式,既可用于方向向量也可用于位置坐标。
核心优势
无需显式构造旋转矩阵;角度使用度制更直观;轴会自动归一化;可在顶点或片元阶段通用。
常见用途
围绕任意轴旋转法线/切线,生成旋转各向异性或流动高光。
旋转 UV/三维噪声采样坐标,制作旋转纹理与域扭曲。
在顶点阶段绕某轴旋转局部位置,实现旋转动画或建模变换。
对反射/视线等方向向量做小角度扰动以打破重复感。
如何调整
amount 以“度”为单位,正负决定旋转方向(遵循右手定则)。axis 会自动归一化,但不能为零向量。若要绕任意枢轴点 p 旋转位置 pos:先做 pos.sub(p),旋转后再加回 p。若已有弧度值,可先转换为度再传入。
代码示例
1// 绕世界空间 Y 轴将法线旋转 45° 并可视化
2const axisY = vec3( 0, 1, 0 );
3const rotatedN = mx_rotate3d( normalWorld, 45.0, axisY );
4material.colorNode = rotatedN.mul( 0.5 ).add( 0.5 );
5
6// 在顶点阶段绕 Y 轴旋转局部顶点位置(围绕原点)
7material.positionNode = mx_rotate3d( positionLocal, 30.0, vec3( 0, 1, 0 ) );