GLSL Shader для преобразования шести текстур в равноугольную проекцию

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

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

Я нашел шейдер, который преобразует кубическую текстуру в равноугольную: ссылка

1 ответ

Решение

Шаг 1: Скопируйте шесть текстур в текстуру кубической карты. Вы можете сделать это, привязав текстуры к FBO и используя 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));
}
Другие вопросы по тегам