Всем привет. Хочу нарисовать примерно такой график: ссылка. Вот обратите внимание на структуру поверхности, там цвет прямоугольников меняется ступенчато. Так вот, я хочу достичь такого же результата, но при этом не задавать цвета явно для каждой вершины (через VAO/VBO), а вычислять их на лету во фрагментном шейдере, в зависимости от значения Z.
И тут возникла такая проблема, посмотрите скриншот: https://ibb.co/QPpp1RB, wireframe: https://ibb.co/8NVTZZV. Получается такая вот ромбовидность.
Вот код шейдеров.
#version 330 core
uniform mat4 u_mvp;
in vec3 a_pos;
flat out vec3 vertex;
void main()
{
vertex = a_pos;
gl_Position = u_mvp * vec4(a_pos.xyz, 1.0f);
}
#version 330 core
flat in vec3 vertex;
vec3 get_color(float x)
{
float t = (tanh(x) + 1) * 0.5f;
vec3 a = vec3(0.0f, 0.0f, 1.0f);
vec3 b = vec3(1.0f, 1.0f, 1.0f);
return mix(a, b, t);
}
void main()
{
gl_FragColor = vec4(get_color(vertex.z), 1.0f);
}
Почему так происходит? Как это можно исправить или сделать по-другому? Я только недавно стал заниматься комп. графикой, так что не судите :)