Я пытаюсь передать float *, который содержит 128 * 128 float, в шейдер. Поскольку этот массив слишком велик, я пытаюсь пройти мимо текстуры, чтобы мой float * попал в мой шейдер. Проблема в том, что я не знаю, как использовать этот массив внутри моего шейдера. Я печатаю свой float * перед отправкой в мой шейдер, и он содержит числа от -1 до 1.
Моя цель - симулировать волны на воде с перлин-шумом, поэтому мой массив float - это перлин-шумы.
Итак, я создаю свою текстуру шума следующим образом:
_perlin_noise = new float[_dimension * _dimension];
//... I put float inside my _perlin_noise variable
//Then I instantiate my texture :
glGenTextures(1, &_perlin_noise_text);
glBindTexture(GL_TEXTURE_2D, _perlin_noise_text);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_R32F, _dimension, _dimension, 0,
GL_RED, GL_FLOAT, _perlin_noise);
glActiveTexture(0);
glBindTexture(GL_TEXTURE_2D, 0);
В моей воде используются две текстуры: одна текстура полностью синего цвета, другая - текстура пены. Так что теперь у меня есть третья текстура, это мой перлин-шум. И я хочу отрегулировать высоту моих вершин с помощью шума перлина.
Итак, прежде всего, я назначаю равномерную переменную своему шейдеру следующим образом:
main_water_shader->use();
glUniform1i(glGetUniformLocation(main_water_shader->getProgram(), "main_water_texture"), 0);
glUniform1i(glGetUniformLocation(main_water_shader->getProgram(), "foam_texture"), 1);
glUniform1i(glGetUniformLocation(main_water_shader->getProgram(), "perlin_noise"), 2);
Затем я хочу отрегулировать высоту вершинв моем вершинном шейдере, но я не знаю, как это сделать. Я попытался сделать это в своем вершинном шейдере:
uniform sampler2D perlin_noise;
//some other uniform...
void main()
{
//calculating vertex height
float height = float( texture2D(perlin_noise, vec2(x, y)) );
vec3 new_vertex_position = vertex_position;
new_vertex_position.y = height;
//Standard stuff
vs_position = vec4(ModelMatrix * vec4(new_vertex_position, 1.f)).xyz;
vs_texcoord = vec2(vertex_texcoord.x, vertex_texcoord.y );
vs_normal = mat3(ModelMatrix) * vertex_normal;
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(new_vertex_position, 1.f);
}
Ничего не изменилось, высота моих вершин осталась прежней. И если я пытаюсь отобразить мою текстуру perlin_noise в моем фрагментном шейдере на план, я получаю это:

Вы можете увидеть мою плоскость (которая являетсяочень большой) с черно-белой текстурой, которая повторяется. Поэтому я предполагаю, что моя текстура perlin_noise содержит что-то (даже если это немного странно), но я не могу понять, как использовать ее в моем вершинном шейдере.
РЕДАКТИРОВАТЬ: В моем скриншоте я также используюВершинный шейдер с высотой, отрегулированной с помощью перлин-шума, но, как вы можете видеть, моя плоскость плоская, поэтому она не работает.
EDIT2: Если я не достаточно ясен, скажите мне