54std::unique_ptr<GlLookUpTable3D>
GlLookUpTable3D::create(
const std::function<QVector3D(
size_t x,
size_t y,
size_t z)> &mapping,
size_t xSize,
size_t ySize,
size_t zSize)
61 glBindTexture(GL_TEXTURE_3D,
handle);
62 glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAX_LEVEL, 0);
63 glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_LOD, 0);
64 glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAX_LOD, 0);
65 glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
66 glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
67 glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
68 glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
69 glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
72 for (
size_t z = 0; z <
zSize; z++) {
73 for (
size_t y = 0; y <
ySize; y++) {
74 for (
size_t x = 0; x <
xSize; x++) {
75 const auto color = mapping(x, y, z);
76 data.push_back(color.x());
77 data.push_back(color.y());
78 data.push_back(color.z());
83 glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA16F,
xSize,
ySize,
zSize, 0, GL_RGBA, GL_FLOAT, data.data());
84 glBindTexture(GL_TEXTURE_3D, 0);
static std::unique_ptr< GlLookUpTable3D > create(const std::function< QVector3D(size_t x, size_t y, size_t z)> &mapping, size_t xSize, size_t ySize, size_t zSize)