У меня есть несколько мешей, которые я хочу нарисовать в glDrawElementsInstanced
, но я хочу, чтобы все вершины имели разную высоту, поэтому для этого я пытаюсь передать высоту сэмплера1D.
Вот как я создаю текстуру:
glGenTextures(1, &meshHeightTexId_);
glBindTexture(GL_TEXTURE_1D, meshHeightTexId_);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
// meshHeight_.size() = meshNumber_*meshSize_
glTexImage1D(GL_TEXTURE_1D, 0, GL_RED, meshNumber_*meshSize_, 0, GL_RED, GL_FLOAT, meshHeight_.data());
glBindTexture(GL_TEXTURE_1D, 0);
(meshNumber_ - номера сетки, meshSize_ - количество содержащихся вершин, а meshHeight_ - вектор с плавающей точкой, содержащий все данные о высоте)
Вызов, который я делаю перед отрисовкой:
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_1D, meshHeightTexId_);
И в шейдере я собираю значение следующим образом:
int index = gl_InstanceID * meshSize + gl_VertexID;
vec4 tempo = texture(heightData, index);
float height = tempo.r;
(heightData - это имя сэмплера1D, которое я использую иmeshSize - это единое целое, содержащее количество вершин в сетке)
Затем я использую высоту в качестве значения y для вершины.
Но при этом похоже, что я получаю только высотуравно 0 (кроме 1 под углом без причины).
Я могу сделать что-то не так при инициализации текстуры ..
А также, если у вас есть идея получше, чем передатьвысота ячеек по текстуре я бывозьми.