rotate
rotate
一个强大的函数节点,用于在着色器中对二维(如 UV)或三维(如顶点位置)向量进行旋转,将复杂的旋转数学计算抽象为简单的函数调用。
核心优势
将复杂的旋转矩阵和三角函数计算封装起来,极大地简化了代码并降低了出错风险。它能在 GPU 端高效执行动态旋转,并能智能地根据输入向量的维度(2D/3D)自动适应,提供统一的编程接口。
常见用途
旋转纹理坐标(UV),以实现贴图的动态旋转或方向修正。
创建程序化的顶点动画,如物体的自转、摇摆等,所有计算均在 GPU 完成。
实现几何体变形,例如通过基于顶点属性的旋转来制作扭曲(Twist)效果。
如何调整
通过改变第二个参数 `rotationNode` 来控制旋转效果。例如,将输入从静态值改为 `time` 可实现从静止到连续旋转的转变;改变输入向量的分量(如从 `vec3(0, time, 0)` 改为 `vec3(time, time, 0)`)可以改变旋转轴;使用 `sin(time)` 替代 `time` 则可以将无限旋转变为来回摇摆的动画。
代码示例
1// 定义一个随时间变化的、围绕 Y 轴的欧拉角旋转
2const rotationAmount = vec3( 0, time, 0 );
3
4// 将旋转应用于模型的本地顶点坐标
5const rotatedPosition = rotate( positionLocal, rotationAmount );