func (self *ArrayVoxelField) SetValue(from, to v.Vector3i, eval VoxelFunc) { from = from.Sub(v.Vector3i{self.translateX, self.translateY, self.translateZ}) to = to.Sub(v.Vector3i{self.translateX, self.translateY, self.translateZ}) for z := from.Z; z < to.Z; z++ { for y := from.Y; y < to.Y; y++ { for x := from.X; x < to.X; x++ { if x < 0 || y < 0 || z < 0 || x >= self.sizeX || y >= self.sizeY || z >= self.sizeZ { continue } id := x + y*self.sizeX + z*self.sizeX*self.sizeY v := eval(x, y, z) if v < 0 { v = 0 } else if v > 255 { v = 255 } self.data[id] = byte(v) } } } }