ivec3
ivec3
将任意三维向量输入(如 vec3)的每个分量截断小数部分,从而转换为一个三分量整数向量(ivec3)。
核心优势
为需要三维整数坐标的 GPU 操作(如 3D 纹理的 `texelFetch`)提供类型安全。它将底层的 `ivec3()` 构造函数抽象化,使得创建基于三维空间的离散化逻辑(如体积噪波、3D 棋盘格)变得直观且跨后端兼容。
常见用途
为 3D 纹理(体积纹理)的 `texelFetch` 提供整数坐标(体素地址)
为三维程序化内容(如 3D 棋盘格)计算空间网格索引
为 2D 纹理数组(Sampler2DArray)提供采样坐标(xy 为像素,z 为层索引)
在空间哈希或网格加速结构中,将浮点位置转换为整数索引
如何调整
其视觉效果由输入控制。对于 3D 程序化图案,在 `ivec3` 节点前增大输入坐标的乘法系数,会让最终的 3D 图案(如棋盘格)变得更密集。在输入中加入 `timer` 会使整个 3D 整数网格随时间偏移,导致图案在模型内部“流动”或“穿行”。
代码示例
1// 将局部坐标放大并转换为三维整数索引,用于创建 3D 棋盘格
2const voxelIndex = ivec3( positionLocal.mul( 5 ) );
3
4// 根据三维索引的奇偶性决定颜色
5const indexSum = voxelIndex.x.add( voxelIndex.y ).add( voxelIndex.z );
6const isEven = indexSum.mod( 2 ).equal( 0 );