GLSL Shader将六个纹理转换为Equirectangular投影

时间:2016-01-27 21:45:13

标签: opengl glsl shader

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

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

我找到了一个将立方体纹理转换为另一个纹理的着色器:link

1 个答案:

答案 0 :(得分:3)

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