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));
}