nuclear@1: Volume::Volume(int xsz, int ysz, int zsz) nuclear@1: { nuclear@1: this->xsz = xsz; nuclear@1: this->ysz = ysz; nuclear@1: this->zsz = zsz; nuclear@1: slice_size = xsz * ysz; nuclear@1: nuclear@1: voxels = new Vector4[xsz * ysz * zsz]; nuclear@1: nuclear@1: // precalculate slice start pointers, cause why not... nuclear@1: slices = new Vector4*[zsz]; nuclear@1: for(int i=0; ix = col.x; nuclear@1: ptr->y = col.y; nuclear@1: ptr->z = col.z; nuclear@1: } nuclear@1: nuclear@1: void Volume::set_voxel_alpha(int x, int y, int z, float alpha) nuclear@1: { nuclear@1: slices[z][y * xsz + x].w = alpha; nuclear@1: } nuclear@1: nuclear@1: nuclear@1: const Vector4 &Volume::get_voxel(int x, int y, int z) const nuclear@1: { nuclear@1: return slices[z][y * xsz + x]; nuclear@1: } nuclear@1: nuclear@1: const Vector3 Volume::get_voxel_color(int x, int y, int z) const nuclear@1: { nuclear@1: Vector4 *ptr = slices[z] + y * xsz + x; nuclear@1: return Vector3(ptr->x, ptr->y, ptr->z); nuclear@1: } nuclear@1: nuclear@1: float Volume::get_voxel_alpha(int x, int y, int z) const nuclear@1: { nuclear@1: return slices[z][y * xsz + x].w; nuclear@1: } nuclear@1: nuclear@1: nuclear@1: Vector4 &Volume::operator [](int idx) nuclear@1: { nuclear@1: return voxels[idx]; nuclear@1: } nuclear@1: nuclear@1: const Vector4 &Volume::operator [](int idx) const nuclear@1: { nuclear@1: return voxels[idx]; nuclear@1: } nuclear@1: nuclear@1: nuclear@1: const Vector4 *Volume::get_data_ptr() const nuclear@1: { nuclear@1: return voxels; nuclear@1: } nuclear@1: