Динамическая загрузка текстур в OpenGL

256
08 ноября 2017, 02:25

Всем доброго времени суток. Появилась такая проблема: Нужно динамически менять текстуру для примитива. Т.е. предварительно есть 4-5 текстур. Нужно во время работы программы изменять текстуры у примитива.

Все найденные мною мануалы показывают применение текстур на примере VAO, где текстура лежит в массиве с координатами/цветами и прочим. Но в таком случае смещение задаётся сразу и статически.

Подскажите пожалуйста, какая из идей может быть верной?

1) Прописать в массив сразу все координаты всех текстур. Т.е. помимо 9-ти координат примитива (пока пробую на обычном треугольнике) будут ещё 6 * 4 координат для текстур. И затем, в процессе работы программы, передавать в некую функцию аргумент, который будет значить текущее смещение для текущей текстуры.

2) С помощью uniform загружать не только текстуру, но и координаты текстуры в фрагментный шейдер. Тут встаёт вопрос, как это сделать? Это было бы значительно проще, по-моему. Но фрагментый шейдер описывает отдельные фрагменты, и координаты текстуры загружаются в формате vec2. Я понимаю, что в таком случае я не смогу загрузить сразу вес массив из 6-ти координат, и надо передавать каждые 2 координаты отдельно. Пробовал так:

        GLuint texLoc = glGetUniformLocation(ourShader.Program, "tex");
        GLuint texCoord = glGetUniformLocation(ourShader.Program, "texcoord");
        for (int j = 0; j < 3; j++)
        {
            glUniform2f(texCoord, vectorOfPrimitives[i].texcoord[j][0], vectorOfPrimitives[i].texcoord[j][1]);
        }
        glUniform1i(texLoc, texture);

И шейдер:

#version 330 core
in vec2 TexCoord;
out vec4 color;
uniform vec4 ourColor;
uniform vec2 texcoord;
uniform sampler2D ourTexture;
void main(){
    color = texture(ourTexture, TexCoord) * ourColor;
}

Это неправильно, но как ещё можно загрузить данные для каждой координаты в шейдер? И возможно ли это?

READ ALSO
VS: статическая линковка std библиотеки

VS: статическая линковка std библиотеки

Скажите можно ли все библиотеки линковать динамически (то есть с ключем /MD), а стандартную библиотеку - статически (/MT)? Статическая стандартная...

175
Указатель С++ и динамическая память

Указатель С++ и динамическая память

Доброго всем времени суток! Хочу уточнить, правильно ли я понимаю теориюИмеем такое:

179
Загрузчик 3d моделей. С++ OpenGL

Загрузчик 3d моделей. С++ OpenGL

Знаю есть библиотека загрузчик 3d моделей AssimpЕсть ли альтернатива

192
Компиляция проекта на C++ из заголовочного файла

Компиляция проекта на C++ из заголовочного файла

Как компилировать проект на C++, находясь в *h файле? Это жутко неудобно, сделав изменения в заголовочном файле, переключаться на какой-либо...

225