GLSL Shader 将六个纹理转换为等距柱状投影

GLSL Shader to convert six textures to Equirectangular projection

我想从六个二次纹理创建一个 equirectangular projection,类似于将立方投影图像转换为等距柱状图像,但使用单独的面作为纹理而不是立方投影中的一个纹理。

出于性能原因,我想在显卡上执行此操作,因此想使用 GLSL 着色器。

我发现了一个可以将立方体纹理转换为等距圆柱体纹理的着色器:link

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