OpenGL копирование текстур искажает текстуры

Я копирую текстуру из кадрового буфера в пустую текстуру, используя

float *temp = new float[width*height*4];
glBindTexture(GL_TEXTURE_2D, fbTex2);
glGetTexImage(GL_TEXTURE_2D, 0, GL_RGBA, GL_FLOAT, temp);
glBindTexture(GL_TEXTURE_2D, colour_map_tex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, temp);

(да я пытался glCopyImageSubData() и это не сработало)

а также colour_map_tex инициализируется как

glGenTextures(1,&colour_map_tex);
glBindTexture(GL_TEXTURE_2D, colour_map_tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA,width,height,0,GL_RGBA,GL_UNSIGNED_BYTE,NULL);

затем он используется для хранения цветовой карты (все рисуется, но с использованием одного цвета для каждого объекта / сетки), которая рисуется в буфере кадров и затем используется для создания маски.

но проблема в том, когда я использую маску, все выровнено, т.е. маска и текстура, которую она маскирует, выровнены, но когда я перемещаю камеру вокруг, переводы немного отличаются, что приводит к тому, что замаскированное изображение действительно искажено относительно реальной сцены.

поэтому мои вопросы: есть ли что-нибудь, что может быть причиной перекоса? или что-нибудь, что можно сделать, чтобы это исправить? 3-й буфер кадров был бы лучшей идеей вместо копирования данных в пустую текстуру? и если да, то почему?

Обзор происходящего:

1. вся сцена визуализируется с текстурами в кадровый буфер.
2. вся сцена визуализируется второй раз без текстур, но каждая сетка имеет связанный с ней цвет, это отображается во втором кадровом буфере и для маски.
3. текстура маски копируется в пустую текстуру
4. текстура из буфера первого кадра рисуется на плоскости размером с область просмотра (рисуется во второй буфер кадра)
5. маска накладывается на плоскость для маскировки частей текстуры (отрисовывается во второй буфер просмотра)
6. текстура из буфера первого кадра рисуется на плоскости размером окна просмотра, на этот раз выводится на экран
7. есть дополнительное постобработанное изображение, сгенерированное из текстуры во втором кадровом буфере. который полупрозрачен и рисуется поверх рендеринга сцены.

Я не опубликовал всю функцию отображения, потому что она довольно большая, но я рад опубликовать больше, если есть определенный бит, который вы хотите.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]