2016-01-27 2 views
0

Я хочу создать equirectangular projection из шести квадратичных текстур, похожих на преобразование кубического проекционного изображения в равноугольное изображение, но с отдельными гранями в виде текстур вместо одной текстуры в кубической проекции.GLSL Shader для преобразования шести текстур в Equirectangular projection

Я бы хотел сделать это на графической карте по соображениям производительности и, следовательно, хочу использовать GLSL Shader.

Я нашел Shader, который преобразует кубическую текстуру Равнопромежуточная один: link

+0

В чем вопрос? – derhass

+0

Мне нужно получить некоторые подсказки о том, как взять несколько текстур и «переместить» их пиксели на конечную текстуру с помощью алгоритма – CrushedPixel

+0

Что такое «квадратичная текстура»? А что такое «кубический проекционный образ»? –

ответ

2

Шаг 1: Скопируйте шесть текстур в текстуру куба карты. Вы можете сделать это, привязав текстуры к FBOs и используя glBlitFramebuffer().

Шаг 2: Запустите следующий фрагментарный шейдер. Вам нужно будет изменить атрибут Coord от (-1, -1) до (+ 1, + 1) по квадранту.

#version 330 
// X from -1..+1, Y from -1..+1 
in vec2 Coord; 
out vec4 Color; 
uniform samplercube Texture; 

void main() { 
    // Convert to (lat, lon) angle 
    vec2 a = Coord * vec2(3.14159265, 1.57079633); 
    // Convert to cartesian coordinates 
    vec2 c = cos(a), s = sin(a); 
    Color = sampler(Texture, vec3(vec2(s.x, c.x) * c.y, s.y)); 
}