我想从六个二次纹理中创建一个equirectangular projection,类似于将立方投影图像转换为等距矩形图像,但是将单独的面作为纹理而不是立方投影中的一个纹理。
出于性能原因,我想在显卡上执行此操作,因此希望使用GLSL着色器。
我找到了一个将立方体纹理转换为另一个纹理的着色器:link
答案 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));
}